1

私は次のテーブル構造を持っています:

Entity
---------------------
id | name

Users
---------------------
id | name | password 

UserGroups
---------------------
id | parent_id | name

Users_UserGroups
---------------------
user_id | user_group_id

Roles
---------------------
id | parent_id | name

Users_Roles
--------------------
user_id | role_id

また、主な目的はEntity、次の条件で行レベルのアクセス制限を作成することです。

1)ユーザーが作成しますEntity-彼はそれを見ることができます(彼は所有者です)
2)ユーザーグループのメンバーもそれを見ることができます(しかし、他に定義されている場合-見えない-それはユーザープライベートになります)。したがって、レコードはユーザーまたはグループのプライベート、またはパブリックにすることができます。すべてのユーザーがレコードを表示できます。たとえば、ユーザーは営業チームAに属し、すべてのグループメンバーを表示できるレコードがありますが、ユーザー(潜在的なクライアント)のみを表示できるレコードが1つ以上存在する場合があります。
3)たとえば、ユーザーAが役割を担っsalesmanており、この役割は親役割の子ですsales managers。次に、sales managerロールであるユーザーはユーザーAエンティティを表示できます。役割の階層構造。上司は彼の直接の従業員が何をしているのかを見ることができます:
)4)profileプロファイルを役割に追加し、必要に応じてユーザーにも追加できるテーブルもあります。

主な質問は、ユーザー/グループ/役割/プロファイルをエンティティに関連付ける方法ですか?そして、権限を定義する方法は?私のアイデアは、列'user_id'をに作成することでしたEntity。レコードを照会するときEntityは、ユーザーを検索し、どの役割、グループ、プロファイルがユーザーであるかなどを確認します。しかし、それは複雑すぎると思います。多くの追加のテーブルがなくても、はるかに簡単な方法があるかもしれません。アドバイスをいただければ幸いです:)

4

1 に答える 1

1

標準的なパターンは、プリンシパルをアクセス許可を割り当てることができるものとして定義することです。その場合、ユーザー、ユーザーグループ、およびロールはすべてプリンシパルの例です。実装する1つの方法は、principal_idを主キーとするプリンシパルテーブルを作成し、user_idを介してユーザーテーブルを関連付け、role_idを介してロールテーブルを関連付け、user_group_idを介してグループテーブルを関連付けることです。

次に、entityにentity_owner_principal_id列があり、entity_id、principal_idを持つentity_permissionsテーブルがあります。このテーブルに「読み取り」、「削除」、「更新」などの列を追加したり、より柔軟なものを追加したりできます。

また、グループとロールの間に実際の違いがあるかどうかを検討することもできます。これらは両方ともユーザーをグループ化する方法であり、両方に階層があるように見えます。

于 2012-11-18T22:54:10.483 に答える