创建用户的权限报告

问题描述:

我有一个表,我存储用户的权限授予或拒绝访问软件的不同模块。创建用户的权限报告

idUser  idModule 
    1   1 
    1   2 
    1   3 
    2   4 

用户 “1” 有权访问模块1,2,3,但没有4. 用户 “2” 只能访问4。

因此,idModule是来自Module表的FK,如果用户有访问权限,它将在这个表中有一行,否则它将被拒绝。

idModule   Module 
    1   Can Create Users 
    2   Can Edit Users 
    3   Can Delete Users 
    4   Can View Users 

我想一个查询,输出:

idUser Module1 Module2 Module3 Module4 
    1  1   1   1   0 
    2  0   0   0   1 

这种方式是很容易做到的报告。

感谢您的阅读。

+0

而且您正在使用什么数据库产品? Oracle,Mysql,Sql服务器? – Ghost 2012-07-27 20:46:54

+0

@Ghost MS Sql Server 2008 R2。谢谢 – Jaxedin 2012-07-27 21:01:04

+0

@hsanders我使用CASE WHEN,希望看到其他方式。 – Jaxedin 2012-07-27 21:04:00

也许一个简单的反规范化查询:

select idUser 
    , max(case when idModule=1 then 1 else 0 end) as Module1 
    , max(case when idModule=2 then 1 else 0 end) as Module2 
    , max(case when idModule=3 then 1 else 0 end) as Module3 
    , max(case when idModule=4 then 1 else 0 end) as Module4 
from your_table 
group by 1 
+0

如果我添加了一些模块,我必须编辑这个查询。有没有一种方法可以与1,2,3或N模块? – Jaxedin 2012-07-27 21:03:37

+0

由于您有一个包含所有idModule值的表,您可以编写一个过程或宏来生成类似于上面的select语句。也许你应该问另一个问题或修改这个问题(我不知道该协议)。 – BellevueBob 2012-07-27 21:40:28

+0

感谢Bob,我会用“case when”。 – Jaxedin 2012-07-28 14:18:04