ユーザーとグループでデータベースを作成するための基本的なモデルは何ですか?


9

私はウェブサイトの基本的なセキュリティシステムに最適な方法を見つけようとしています。ユーザーとグループが必要なことはわかっています。

私が持っていると思いました:

user_table
user_id
user_name
...

group_type
group_id
group_name
parent_id
...

group_table
id
user_id
group_id

1つ目はユーザー、2つ目はグループ、3つ目は2つを接続する中間テーブルです。1人のユーザーに多数のグループがあります。

この音は大丈夫ですか?


名前以外。あなたのGROUP_TYPEテーブルには、名前を付ける必要がありますGROUPまたは似たような、そしてあなたのGROUP_TABLEことは、それがリンクだものだとして、ユーザーとグループの両方を参照する必要があります。
アダムムッシュ

@adamはgroup_tableがuser_idとgroup_idでそれをしませんか?
ジョニー

4
@AdamMusch GROUPという名前は使用しないでください。予約語であるためです。テーブルと列が予約語にちなんで命名してはいけません
Philᵀᴹ

1
@フィルは同意した。あなたにもテーブル名もSELECTとフィールドをFROMあなたのようなクエリ持つことができるようにSELECT [FROM] FROM [SELECT]
JNK

2
'app_user'や 'app_role'のような基本エンティティを呼び出してみてください
ConcernedOfTunbridgeWells

回答:


17

これをモデル化する従来の方法は、ロールベースのセキュリティと呼ばれるパターンを使用することです。

アイデアは、ユーザーのグループだけでなく、権限のグループも持つことです。パターンは次のようになります。

ロールベースのセキュリティERD

テーブル名には予約語を使用したくないので、図に示すようにテーブルに正確に名前を付けないでください。

これが機能する方法は、グループまたはロールに割り当てられたユーザーのリストだけでなく、それらに割り当てられた権限のリストもあることです。これにより、誰が何をできるかだけでなく、私をフォローしている場合は何ができるかをテーブル駆動できます。


しかし、私のユーザーにmanagerなどの役割があり、何らかの理由で同じユーザーに特定の権限も必要な場合(その役割ではなく、他の役割だけではない場合)はどうなりますか?
levi

@levi-それが発生した場合、それを処理する1つの方法は、「ボブの特別なアクセス許可」のような特別な役割を作ることです。この。個人の例外と考えることが実際には考慮されていない微妙な新しい役割である可能性があります。ボブが辞めるとどうなりますか?ボブの交換には、その例外的な許可も必要ですか?その場合、実際には、例外ではなく、1人のメンバーの役割を持っています。
Joel Brown

@levi-別の可能性として、個人と役割の権限を混在させる必要がある場合があります。その場合、ROLEテーブルを個別タイプとグループタイプにサブタイプ化できます。グループタイプのメンバーは0から多く、個別タイプのメンバーは1つだけです。これらのカーディナリティルールを適用する方法は、あなた次第です。これは、データベーススキーマで宣言的に行うことができます。その場合、図のスキーマを少し変更する必要があります。または、アプリケーションロジックを使用することもできます。その場合、スキーマはまだ上記の図のように見えます。
Joel Brown
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.