Laravel Permissionを使おう①解説編 RBAC方式のアクセス制御を簡単に実現できる優れたツール

2021年10月21日

こんにちは。アプリケーションを作る時に、必ずと行ってよいほど考慮しなくてはならない「アクセス制御」。アプリケーションを作るたびに、1から考えてないでしょうか?Laravelには簡単にアクセス制御できるLaravel Permissionというツールが存在しますので紹介していきたいと思います。

Laravel Permissionとは

LaravelでRBAC方式のアクセス制御を実現するためのプラグインです。RBACってなんぞや?となった方、後ほど詳しく解説しますのでご安心ください。このプラグインを導入すると、専用のテーブルが作成されるので、あとはそのテーブルにデータを設定するだけで簡単にアクセス制御を行うことができます。

RBAC方式とは

RBACとはシステムのアクセス制御方式の一種。Role Base Access Controlの略で、日本語では役割ベースのアクセス制御と呼びます。その名が表す通り、役割に対してアクセス権を付与する仕組みです。役割とは管理者や一般ユーザーといったシステム上の機能を表し、ユーザーには1つ以上の役割を与えることができます。ユーザーは役割を介してシステム機能へのアクセス権を取得します。ユーザーに直接アクセス権を付与しないため、管理の煩雑さを低減できることメリットです。

以下の図はRBAC方式のアクセス制御の簡単な使用例です。ロールは「管理者」と「一般ユーザー」の2種定義されています。管理者は「機能A」にのみアクセス権があり、「一般ユーザー」は「機能B、C」のアクセス権があります。ユーザーAは管理者、ユーザーBは管理者と一般ユーザー、ユーザーCは一般ユーザーをそれぞれ割り当てます。

ポイントは、ロールとユーザーを関連付けるだけで、複数のアクセス権をユーザーに割り当てられることです。ロールを適切に定義できれば管理の負荷をかなり減らすことができ、より柔軟なアクセス管理ができるでしょう。

Laravel Permissionの用語整理

はじめにLaravel Permissionの用語を整理しておきます。ユーザーはmodel、ロールはrole、アクセス権はpermissionと呼びます。

  • model‥ユーザー
  • role‥ロール(役割)
  • permission‥アクセス権

Laravel Permissionをインストールするとそれぞれの要素に該当するテーブルと、要素を関連付けるためのテーブルが作成されます。それらにデータを登録することでアクセス権セットを作っていくわけです。

Laravel Permissionのテーブル構成

Laravel Permissionのテーブル構成を説明するために概念モデルを描いてみました。

各テーブルが持つ役割は以下です。

usersLaravelのデフォルトで存在するusersテーブルです。
ログインユーザーを登録します。
model_has_rolesusersとrolesの関連付けに使用します。
rolesロールを登録します。
role_has_permissionsrolesとpermissionsの関連付けに使用します。
permissionsアクセス権を登録します。

RBAC方式を実現するためのシンプルでわかりやすいテーブル構成であることがわかります。

まとめ

今回はLaravel Permissionの概要を解説しました。Laravel Permissionの考え方の基礎となっているRBAC方式は理解いただけたでしょうか。この方式とテーブル構成を理解できれば、もうLaravel Permissionを半分以上理解できたと言っても過言ではありません。

次回は具体的なLaravel Permissionの使い方を具体的なコードを用いて解説していきたいともいます。

Laravel

Posted by kobainmac