日期:2014-05-18  浏览次数:20585 次

读取权限的SQL设计,急,急,急!!!
我对系统权限管理有以下几个表:

1、(角色表)tblRoles

role_id         role_name       pid
1               角色一           0
11             角色二           1
111           角色三           11
2               角色四           0
......  

2、(角色用户分配表)tblAssign
role_id               user_Id
111                         test
2                             test
......

3、(权限分配表)
role_id                     add                     delete                             update
11                                 0                           1                                       0
111                               1                           0                                       0
2                                   0                           0                                       1
......

这里有两个问题,请高手指教:
1、角色有层级关系,如果用户隶属一个子角色,那他便继承父角色的权限,如何通过SQL语读出某一用户隶属的所有角色?如:test用户隶属的角色便有(1,11,111,2)


2、因为test用户隶属于1,11,111,2角色,那它的权限便是这几个角色加起来的总和,能否通过SQL语句直接返回“或运算”之后的结果呢?如test用户得到的权限便有:
add                 delete                         update
1                         1                                   1

------解决方案--------------------
用函数嘛,肯定可以达到你要的要求,你这题目太长了,看得我太累了。
------解决方案--------------------
--测试数据
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001 ',NULL , '山东省 '
UNION ALL SELECT '002 ', '001 ', '烟台市 '
UNION ALL SELECT '004 ', '002 ', '招远市 '
UNION ALL SELECT '003 ', '001 ', '青岛市 '
UNION ALL SELECT '005 ',NULL , '四会市 '
UNION ALL SELECT '006 ', '005 ', '清远市 '
UNION ALL SELECT '007 ', '006 ', '小分市 '
GO

CREATE FUNCTION f_Pid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int) <