0

階層的な ACL データを含むデータベースを実装したい

マイ テーブル

  • USERS: idUser、ユーザー名、...
  • GROUPS: idGroups、名前...
  • GROUPSENTITIES: idGroup、idChild、childType (ユーザー用に 1 つ、グループ用に 2 つ)
  • ROLES: idRole,名前...
  • ROLESENTITIES: idRole、IsDeny、idChild、childType (ユーザー用に 1 つ、グループ用に 2 つ)

  • すべてのユーザーは 0 個以上のグループに所属できます

  • すべてのグループは 0 個以上のグループに属することができます
  • すべてのユーザーとすべてのグループは 0 個以上のロールに属することができ、ロールは許可または拒否できます
  • 明示的な拒否が見つかった場合、ロールは拒否されます

この種のデータを保存するにはどうすればよいですか? 私のデザインは正しいですか?

許可されたすべての役割を持つユーザーのリストを取得することは可能ですか?

データベースからこの情報を抽出するためのクエリ (T-SQL ベース) を書いてください。

前もって感謝します

4

1 に答える 1

0

期待どおりにテーブルを作成できます。たとえば、グループ内のすべてのユーザーを取得するには、階層グループがある場合、再帰 CTE を使用します。グループ テーブルが次のように設定されているとします。

create table groups (
    groupid int,
    member_userId int,
    member_groupid int,
    check (member_userId is NULL or member_groupid is null)
);

with usergroups as (
      select groupid, member_userid, 1 as level
      from groups
      union all
      select g.groupid, users.member_userid, 1+level
      from users u join
           groups g
           on u.member_groupid = g.groupid
    )
select *
from usergroups;
于 2013-08-17T22:52:57.963 に答える