Jetstreamチーム版でユーザーの役割と権限を簡単に設定する【Laravel8】

Laravelバージョンアップ・ニュース

Laravel8 Jetstreamのチーム版では、ユーザーの役割や権限が簡単に設定できる機能が付いています。

以前は roleやpermissionの設定に面倒な手間暇が必要だったのがウソのよう。

Jetstreamチーム版のインストール・設定方法と、役割によってページの動きを変える方法を紹介していきます。

Jetstream チーム版を設定

まずはインストールから。

インストール時に待ち時間はありますが、5分~10分もあれば、できちゃいます。

Jetstream チーム版のインストール手順

①Laravelの新プロジェクトを jetstream付きでインストールします。

②データベースを新たに設置したい場合は、phpMyAdminにログインして新規データベースを作成します。

データベースの名前をLaravelの.envファイルの【DB_DATABASE= 】に入力してください。

③マイグレーションを実施

④その後、Team版のLivewireをインストール。

これで準備完了です。

なおJetstreamには Livewire版とinertia版がありますが、本記事ではLivewire版を使用します

inertia版は、Vue.js を使うエディションです。

Jetstream Team版インストール後のチェック

インストール後、phpMyAdminのデータベースをチェックしてみると、8個もテーブルができています。

ちなみにチーム版でない場合は、インストール後に作成されているテーブルは次の6個。

インストール後、新規プロジェクトをブラウザで確認すると、次のようになっています。

右上の【Register】でユーザーを登録し、次に【Login】します。

ログイン後の画面はこちら。

赤い部分が、通常版にはないチーム版だけのメニュー。

【Team Setting】、【Create New Team】といった項目がありますね。

【Team Setting】では、次のように、チームに加えたいメンバーのEmailと役割を設定できます。

なお、ひとりのユーザーが異なる役割で、複数のチームに属することもできます。

たとえばユーザーAさんが、BlogAチームではAdmin, BlogBチームではEditor, Blog CチームではCheckerの役割を果たすといったことが可能です。

Jetstream チーム版 の役割・権限変更

チーム版では、手軽に役割を増やしたり、権限を変えたりできます。

役割と権限の変更をするには、app/Providers/JetstreamServiceProvider.phpを編集します。

デフォルトでは、JetstreamServiceProvider.phpには、上記のようにAdministratorとEditorがあります。

サイト上では、次のように表示されます。

ここに次の2点の変更を加えてみます。

  1. 【Editor】ができることの中から、【update】を削除
  2. 【update】権限がある【Checker】という役割を追加

この場合、JetstreamServiceProvider.phpを次のように書き替えます。

赤枠が【Editor】の①、青枠が②の部分の設定変更です。

書き換えた後にページを表示させると、【Editor】の役割説明が変わり、さらに【Checker】という役割が増えていることを確認できます。

hasTeamPermissionで役割・権限ごとに動きを変える

役割や権限を設定したら、これに合わせてサイトを作りたいですよね。

Jetstream チーム版では、こういった目的のためにhasTeamPermissionメソッドが使えます。

hasTeamPermission メソッドとは

Laravel JetStreamの公式ページには、hasTeamPermissionについて次のように書かれています。

(分かりやすくするため、表現はやや変えています。)

ユーザーの権限(permissions) は、hasTeamPermissionメソッドで確認できます。

ユーザーの役割(roles)を調べる必要はありません。

つまり役割とは、ひとつずつの権限(Permissions)を分類するための概念といえます。

*参考元:Laravel Jetstream / Teams

【役割(Role)】ベースではなく、【権限(Permission)】に応じて制限をかける、ということですね。

ここは、大事なポイントです。

hasTemPermissionメソッドで権限ごとに見えるページを変える

では実際にテストで使ってみます。

【/test】ページを、先ほど作成した【Checker】の役割をもつユーザーしか見れないように設定します。

【Checker】は、updateの権限を持っていましたよね。

一方【Editor】には、update権限はありません。

最初にルート設定を作っておきます。

routes/web.phpファイルに、下記を入れます。

Testコントローラーには、hasTeamPermissionを使って、次のようにコードをいれます。

コードの意味

  • ログインしたユーザーの現在のチームを $teamとする。
  • もしユーザーが現在のチームで【update】権限を持っていたら、testページを表示
  • そうでなければ、ダッシュボードにリダイレクトする。

実際にログインして【 /test】ページを表示させようとすると、次のことが起こります。

  • 【update】権限がある【Checker】の役割が割り振られたユーザーには、【/test】が表示可能
  • 【update】権限がない【Editor】の役割をもつユーザーは、リダイレクトされる

よかったら設定を変えたりして、実際に試してみてくださいね。

なお上記のコードはログインしていないユーザーに対しては、エラーになります。

実際に使う場合には、ログインしていない場合の動作も指定する必要があります。

さいごに

今回のまとめ

  • Jetstreamのチーム版はLiveWireインストール時に --teams といれる
  • チーム版ではひとりのユーザーが異なる役割で、複数のチームに所属可能
  • 役割や権限の設定変更はJetstreamServiceProvider.phpで行う
  • hasTeamPermissionを使うと、権限に応じた制限が設定できる

なおチーム版でなくとも、Jetstreamによって高度な認証機能が使えるようになります。

二段階認証や同時セッションチェックなどJetstreamの基本機能は下記にまとめてあるので、まだ知らなかったら、併せて読んでくださいね。

じゅんこ
じゅんこ

これもまた、スゴイ高機能です!

コメント

  1. 溝端 雅浩 より:

    PHP Laravel初心者です。Jetstreamの解説は、とても参考になりました。
    Team版なので、ユーザが所属しているチームによって遷移する画面を変えたいなと思い、
    色々調べていますが、日本語解説ドキュメントが少なく苦戦しています。
    Team版ならではの使い方のノウハウも記事にしていただけると助かります。

    • Junko Junko より:

      溝端さん、
      コメントとリクエスト、ありがとうございます!
      Jetstreamは高機能ですが、分かりにくいところがありますよね^^;
      また記事を書いていきたいと思います。

タイトルとURLをコピーしました