SQL Server:存储分层ACL数据

时间:2013-08-17 22:07:27

标签: sql-server hierarchy hierarchical-data hierarchical

我想实现一个包含分层acl数据的数据库

我的桌子

  • USERS:idUser,username,...
  • GROUPS:idGroups,name ...
  • GROUPSENTITIES:idGroup,idChild,childType(用户为1,组为2)
  • ROLES:idRole,name ...
  • ROLESENTITIES:idRole,IsDeny,idChild,childType(用户为1,组为2)

  • 每个用户都可以属于0个或更多个群组

  • 每个群组可以属于0个或更多群组
  • 每个用户和每个组都可以属于0个或更多角色,并且可以允许或拒绝角色
  • 如果找到明确的拒绝,则角色被拒绝

如何存储此类数据?我的设计是否正确?

是否可以检索具有所有允许角色的用户列表?

请你写一个查询(基于T-SQL)从db

中提取这些信息

提前致谢

1 个答案:

答案 0 :(得分: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;