RBAC (ロールベースのアクセス制御、ロールベースのアクセス制御) とは、ユーザーがロールを通じて権限に関連付けられることを意味します。簡単に言うと、ユーザーには複数の役割があり、各役割には複数の権限があります。このようにして、「user-role-permission」の認可モデルが構築されます。このモデルでは、通常、ユーザーとロールの間、およびロールと権限の間に多対多の関係が存在します。 (下図の通り)
役割は何ですか?これは、特定の数の権限の集合および権限の伝達手段として理解できます。たとえば、フォーラム システムでは、「スーパー管理者」と「モデレーター」が役割です。モデレーターは、フォーラム内の投稿の管理、フォーラム内のユーザーの管理などを行うことができます。これらは権限です。これらの権限をユーザーに付与する場合、ユーザーに直接権限を付与する必要はありません。ユーザーに「モデレータ」の役割を与えることができます。
ユーザー数が非常に多い場合、システムの各ユーザーに 1 つずつ認証 (役割を付与) するのは非常に煩雑です。このとき、ユーザーをグループ化する必要があります。各ユーザーグループには複数のユーザーが含まれます。ユーザーを認可するだけでなく、ユーザーグループを認可することもできます。このように、ユーザーが持つすべての権限は、ユーザー個人が所有する権限と、そのユーザーが所属するユーザーグループが所有する権限を合計したものとなります。 (下の図は、ユーザー グループ、ユーザー、ロールの関係を示しています)
アプリケーション システムでは権限はどのように見えるのでしょうか?機能モジュールに対する操作、アップロードされたファイルの削除と変更、メニューへのアクセス、さらにはページ上の特定のボタンや特定の画像の表示制御さえも、すべて権限のカテゴリに分類されます。一部の権限設計では、機能操作を 1 つのカテゴリとして扱い、ファイル、メニュー、ページ要素などを別のカテゴリとして扱い、「ユーザー-ロール-権限-リソース」権限モデルを形成します。データ テーブル モデリングを行う場合、機能操作とリソースは統合された方法で管理できます。つまり、それらは権限テーブルに直接関連付けられ、より便利でスケーラブルになります。 (下の図を参照)
権限テーブルには「権限タイプ」という列があることに注意してください。たとえば、「メニュー」など、その値に基づいて権限のタイプが区別されます。 「」はメニューのアクセス権限、「OPERATION」は汎用モジュールの操作権限、「FILE」はファイルの変更権限、「ELEMENT」はページ要素の表示制御などを表します。
このデザインには 2 つの利点があります。まず、どれが権限操作でどれがリソースであるかを区別する必要がありません (実際、メニューなど、区別が難しい場合があります。リソースまたは汎用モジュールの権限として理解する必要がありますか?)。第二に、システムが新しいものに対する権限を制御したい場合、新しい関連テーブル「権限 XX 関連テーブル」を作成し、その権限の権限タイプ String を決定するだけで済みます。
ここで注意すべきは、権限テーブルと権限メニュー関連付けテーブル、および権限メニュー関連付けテーブルとメニューテーブルの間には 1 対 1 の関係があることです。 (ファイル、ページ権限、機能操作などにも同じことが当てはまります)。つまり、メニューが追加されるたびに、これら 3 つのテーブルのそれぞれに同時にレコードを挿入する必要があります。この方法では、権限メニュー関連付けテーブルは必要なく、権限テーブルはメニュー テーブルに直接関連付けられ、メニューの ID を保存するために権限テーブルに新しい列を追加する必要があります。 「権限の種類」とこの ID によって、各種類のどのレコードかを区別します。 この時点で、RBAC 許可モデルの拡張モデルの完全な設計図は次のとおりです。
システムがますます大きくなるにつれて、管理を容易にするために、役割グループを導入して役割を分類および管理できます。役割グループは、ユーザー グループとは異なり、承認には関与しません。例: 特定の電力網システムの許可管理モジュールでは、役割は地方局の下にぶら下がっており、地方局はここで役割グループとして使用でき、許可の配布には参加しません。さらに、上記の各メインテーブルの管理と検索を容易にするために、メニューツリー、関数ツリーなどのツリー構造を使用できます。もちろん、これらは権限の割り当てに参加する必要はありません。
上記は基本的な RBAC モデルから拡張されたものであり、具体的な設計はプロジェクト ビジネスのニーズに応じて調整する必要があります。
以上がthinkphp での RBAC ユーザー権利管理データベース設計の詳細な図による説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。