如何在sql中查找所有用户的所有权限?

时间:2017-03-29 08:54:12

标签: sql sql-server tsql

CREATE TABLE Users(UserId int,UserName nvarchar(15), Permisions int)
CREATE TABLE Permissions(PermissionId int,Title NVARCHAR(15))

我有这个数据的权限表:

Id  Title
--------------
1   'Read'
2   'Write'
4   'Update'
8   'Delete'

和用户表

Id  UserName    Permission
-----------------------------------
1   'David'     3
2   'Sara'      12
3   'Maryam'    15

在这种情况下' David'已阅读'并且'写'访问(1+2=3) '萨拉'已更新'并且'删除'访问(4+8=12) 和' Maryam'已阅读','写','更新'并且'删除'存取(1+2+4+8=15)

如何在sql中加入此表并使用以下结果查询

UserName        Title
------------------------------      
'David'         'Read'
'David'         'Write'
'Sara'          'Update'
'Sara'          'Delete'
'Maryam'        'Read'
'Maryam'        'Write'
'Maryam'        'Update'
'Maryam'        'Delete'

2 个答案:

答案 0 :(得分:4)

假设较低级别的权限包含在较高级别中,这将有效...

with CTE as
(
select p.*, sum(id) over (order by id) as p_level
from PermissionTable p
)
select u.*, p.*
from UserTable u
inner join CTE p
on u.permission >= p.p_level

否则

with CTE as
(
select a.Title, a.id + b.id as p_level
from PermissionTable a
cross join PermissionTable b
)
select u.*, p.*
from UserTable u
inner join CTE p
on u.permission = p.p_level

答案 1 :(得分:2)

你能试试吗?

CREATE TABLE P (ID INT, TITLE VARCHAR(20));
CREATE TABLE U (ID INT, UNAME VARCHAR(20), PERM INT);

INSERT INTO P VALUES (1,'Read');
INSERT INTO P VALUES (2,'Write');
INSERT INTO P VALUES (4,'Update');
INSERT INTO P VALUES (8,'Delete');
INSERT INTO U VALUES (1,'DAvid', 3);
INSERT INTO U VALUES (1,'Sara', 12);
INSERT INTO U VALUES (1,'Maryam', 15);

    SELECT *  
    FROM U
    CROSS JOIN P
    WHERE U.PERM & P.ID>0;

输出:

ID          UNAME                PERM        ID          TITLE
----------- -------------------- ----------- ----------- --------------------
1           DAvid                3           1           Read
1           DAvid                3           2           Write
1           Sara                 12          4           Update
1           Sara                 12          8           Delete
1           Maryam               15          1           Read
1           Maryam               15          2           Write
1           Maryam               15          4           Update
1           Maryam               15          8           Delete