初めまして、システム開発事業部のイマイです。
今回はLaravel Jetstream3.*のチーム機能を触ってみたので、その内容をインストール方法からまとめてみたいと思います。
目次
チーム機能とは
チーム機能は、LaravelのJetstreamというパッケージの一部として提供されています。
Jetstreamのチーム機能を使用すると、ウェブアプリケーション内でチームを作成し、ユーザーをチームに招待して、共同でプロジェクトやタスクを管理することができます。
インストール
早速インストールしていきましょう。
今回はLaravel sailで環境構築を行いますので、Dockerが必要になります。
Dockerがインストールされているのを前提として進めていきます。
Laravelプロジェクトを作成
1curl -s https://laravel.build/team-test | bash
team-testの部分は任意のプロジェクト名に変更してください。
作成したプロジェクト内に移動
1cd team-test/
Sailの立ち上げ
1./vendor/bin/sail up
私の環境の場合、デフォルトの80ポートが使用されていたので、.envに下記のように記述して8080ポートを使用するように変更しました。
1APP_PORT=8080
一旦ブラウザで下記へアクセスして、LaravelのWelcome画面が表示されることを確認できたら、Laravelのインストールは完了です。(ポートを変更した場合はそのポート番号に変更する)
続いて、Jetstreamインストールを行います。
JetstreamにはLivewireとinertiaがありますが、今回はLivewireを使用します。
Livewire:テンプレート言語にLaravel Bladeを使用するエディション
inertia:テンプレート言語にVue.js を使うエディション
Jetstreamのインストール
1./vendor/bin/sail composer require laravel/jetstream
livewireとチーム機能を有効にしてインストール
1./vendor/bin/sail artisan jetstream:install livewire --teams
パッケージのインストールとビルド
1./vendor/bin/sail npm install && ./vendor/bin/sail npm run build
マイグレーション実行
1./vendor/bin/sail artisan migrate
チーム機能を有効にすると、「teams」と「team_user」と「team_invitations」の3つのテーブルが追加で作成されます。
ここまで完了したら、もう一度ブラウザで下記へアクセス
画面右上に「Login」と「Register」のリンクが表示されていれば、無事にJetstreamのインストールが完了しています。
チーム機能の紹介
早速、画面右上の「Register」からアカウントを作成してみます。
アカウント作成後、ダッシュボードの画面右上に登録したユーザー名と、チーム名が表示されていることが確認できます。
新規登録時は自分1人だけのパーソナルチームが自動で作成されます。
チーム名をクリックすると、Team SettingsとCreate New Teamの2つのタブが表示されます。
Team Settingsでは、チーム名の変更、チームメンバーの招待、メンバーの削除・権限の変更、チームの削除(パーソナルチームは削除不可)を行うことができます。
Create New Teamでは、新規チームの作成ができます。
ユーザーは複数のチームの作成・所属することができ、それぞれのチームで別の役割を持つことができます。
権限のカスタマイズ方法
役割を増やしたり、権限の変更をすることができます。
権限(role)のカスタマイズは、app/Providers/JetstreamServiceProvider.phpで行うことができます。
デフォルトでは、「Administrator」と「Editor」が定義されています。
Jetstream::roleの引数については、下記のようになっています。
1つ目:役割を一意に識別するための識別子
2つ目:ユーザーに表示される役割の名前
3つ目:役割に関連付ける権限(Permissions)の配列
試しに、manage権限を持った、Managerという役割を追加してみます。
1Jetstream::role('manager', 'Manager', [
2 'manage'
3])->description('Manager users have the ability to manage.');
すると、Roleの欄にManagerが追加されていることが確認できます。
次に、せっかく役割を追加したので、Managerの権限を設定してみます。
app/Policies/TeamPolicy.phpのaddTeamMemberメソッドを以下のように変更します。
1public function addTeamMember(User $user, Team $team): bool
2{
3 return $user->ownsTeam($team) || $user->HasTeamPermission($team, 'manage');
4}
こうすることで、本来はチームのオーナー(作成者)しかチームメンバーの招待は行えないのですが、manage権限を持つ役割のユーザーもチームメンバーの招待が行えるようになります。
権限カスタマイズの動作確認
実際にManagerがチームメンバーの招待が行えるようになったか確認してみます。
まず、Managerロールのユーザーが必要なので、新たにチームにユーザーを招待します。
「TeamSettings」画面の「Add Team Member」で、メールアドレスと、先程作成したManagerを選択して「Add」ボタンを押すと、招待メールが送信されます。
招待されたユーザーは、届いたメールから招待を承認することができます。
Laravel Sailには、Mailpitという開発用メールサーバーが用意されているので、下記のURLにアクセスすることでメールを確認することができます。
チームの招待を受けると、Teamタブに自分のパーソナルチームと招待されたチームが表示され、ここからチームを切り替えることができます。
招待されたチームを選択し、「Team Settings」ページに移動するとチームの招待が行えるようになっていることが確認できました。
ちなみにmanage権限を持たないユーザーの場合は、チームメンバーの招待は行えないようになっています。
以上で、カスタマイズした内容が正常に反映されていることが確認できました。
終わりに
今回は簡単にチーム機能の紹介をしましたが、
権限周りをカスタマイズしていくことで、より複雑な実装も実現できそうです。
また、今回紹介したのはJetstreamのチーム機能の一部ですので、興味のある方は公式ドキュメントを参照してみてください。
https://jetstream.laravel.com/3.x/features/teams.html