2013-08-17 58 views
0

我想實現含分級ACL數據的SQL Server:存儲分層ACL數據

我的表

  • USERS數據庫:ID用戶,用戶名,...
  • GROUPS:idGroups,名稱。 ...
  • GROUPSENTITIES:idGroup,idChild,childType(1用戶,2來自組)
  • ROLES:idRole,name ...
  • ROLESENTITIES:idRole,IsDeny,idChild,childType(1對於用戶來說,2從基)

  • 每個用戶都可以屬於0或多個基團

  • 每個組可以屬於0或多個基團
  • 每個用戶,每個組可以屬於0或多個角色和角色可以允許或拒絕
  • 如果一個明確的拒絕被發現,角色被拒絕

如何存儲這種數據?我的設計是否正確?

是否有可能檢索具有所有允許角色的用戶列表?

能否請您給我寫一個查詢(基於T-SQL)的提取物來自DB

感謝這個信息提前

回答

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; 
+0

請問您能解釋得更好嗎?那角色呢? GROUPENTITIES是一個用於加入GROUPS和USERS的交叉表,但也包括GROUPS的GROUPS(如果childType = 1,則childId包含userId,如果childType = 2則childId包含groupId)。我怎麼可以用cte查詢這個結構? – user2277672

+0

抱歉但無法發佈表的DDL導致列名本地化...... :( – user2277672