middlewareでユーザーroleを判定して出し分けようかと考えていたが、Laravel8系から実装された新機能として、Jetstreamチーム版でユーザの役割・権限を簡単に設定できるそうなので、それを使ってみて、Jetstreamが良いかMiddleware制御が良いか判断したい。
jetstream付きでインストールするにはインストーラーでインストールする必要がある為、
$ composer global require laravel/installer
$ export PATH=”/home/vagrant/.config/composer/vendor/bin:$PATH”
$ laravel new jettest –jet
$ cd jettest
$ php artisan –version
Laravel Framework 8.15.0
mysql> create database jetstream;
.env
1 | DB_DATABASE=jetstream |
$ php artisan migrate
mysql> show tables;
+————————+
| Tables_in_jetstream |
+————————+
| failed_jobs |
| migrations |
| password_resets |
| personal_access_tokens |
| sessions |
| team_user |
| teams |
| users |
+————————+
8 rows in set (0.00 sec)
-> teams, team_user テーブルが出来ている
mysql> describe teams;
+—————+—————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+—————+—————–+——+—–+———+—————-+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| user_id | bigint unsigned | NO | MUL | NULL | |
| name | varchar(255) | NO | | NULL | |
| personal_team | tinyint(1) | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+—————+—————–+——+—–+———+—————-+
6 rows in set (0.00 sec)
// Team版のLivewireをインストール
$ php artisan jetstream:install livewire –teams
$ npm install && npm run dev
$ php artisan serve –host 192.168.33.10 –port 8000
register
L 2つのユーザを作成します。
hpscript hpscript@gmail.com yamada yamada@gmail.com
login後
manage team “Team Settings, Create New Team”が追加されています。
### Team Setting
Team Name: Let’s Go
Add Team Member: メンバーのEmailを追加
### 役割、権限の編集
– “general”の権限を追加します
app/Providers/JetstreamServiceProvider.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | protected function configurePermissions() { Jetstream::defaultApiTokenPermissions([ 'read' ]); Jetstream::role( 'admin' , __( 'Administrator' ), [ 'create' , 'read' , 'update' , 'delete' , ])->description(__( 'Administrator users can perform any action.' )); Jetstream::role( 'editor' , __( 'Editor' ), [ 'read' , 'create' , 'update' , ])->description(__( 'Editor users have the ability to read, create, and update.' )); Jetstream::role( 'general' , __( 'General' ), [ 'general' , ])->description(__( 'General' )); } |
Roleにgeneralが追加されました。
hpscript@gmail.comでログインして、yamada@gmail.comを”general”のroleで追加します。
mysql> select * from team_user;
+—-+———+———+———+———————+———————+
| id | team_id | user_id | role | created_at | updated_at |
+—-+———+———+———+———————+———————+
| 1 | 1 | 2 | general | 2020-11-18 05:37:18 | 2020-11-18 05:37:18 |
+—-+———+———+———+———————+———————+
1 row in set (0.00 sec)
resources/views/test.blade.php
1 2 3 4 5 6 7 8 9 10 | <! DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < title >Document</ title > </ head > < body > < h1 >jetstream test</ h1 > </ body > </ html > |
routes/web.php
1 | Route::get( '/test' , '\App\Http\Controllers\TestController@index' ); |
$ php artisan make:controller TestController
app/Http/Controllers/TestController.php
1 2 3 4 5 6 7 8 | class TestController extends Controller { // public function index() { return view( 'test.index' ); } } |
app/Http/Controllers/TestController.php
1 2 3 4 5 6 7 8 9 | public function index(Request $request ) { $team = $request ->user()->currentTeam; if (auth()->user()->hasTeamPermission( $team , 'read' )){ return view( 'test' ); } return view( 'dashboard' ); } |
yamadaでログインして、current teamをlet’s goにする。
そして、/testを叩くと、dashboardにリダイレクトされる。
簡単なのかややこしいのかわからんが、roleって概念だから、teamとはちょっと違う気がするんだような。
さて、頑張って設計書作るかー モチベーションを上げないと。。。