我想实现一个包含分层acl数据的数据库
我的桌子
USERS
:idUser,username,... GROUPS
:idGroups,name ... GROUPSENTITIES
:idGroup,idChild,childType(用户为1,组为2)ROLES
:idRole,name ... ROLESENTITIES
:idRole,IsDeny,idChild,childType(用户为1,组为2)
每个用户都可以属于0个或更多个群组
如何存储此类数据?我的设计是否正确?
是否可以检索具有所有允许角色的用户列表?
请你写一个查询(基于T-SQL)从db
中提取这些信息提前致谢
答案 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;