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 回答