创建用户的权限报告
我有一个表,我存储用户的权限授予或拒绝访问软件的不同模块。创建用户的权限报告
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
这种方式是很容易做到的报告。
感谢您的阅读。
也许一个简单的反规范化查询:
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
如果我添加了一些模块,我必须编辑这个查询。有没有一种方法可以与1,2,3或N模块? – Jaxedin 2012-07-27 21:03:37
由于您有一个包含所有idModule值的表,您可以编写一个过程或宏来生成类似于上面的select语句。也许你应该问另一个问题或修改这个问题(我不知道该协议)。 – BellevueBob 2012-07-27 21:40:28
感谢Bob,我会用“case when”。 – Jaxedin 2012-07-28 14:18:04
而且您正在使用什么数据库产品? Oracle,Mysql,Sql服务器? – Ghost 2012-07-27 20:46:54
@Ghost MS Sql Server 2008 R2。谢谢 – Jaxedin 2012-07-27 21:01:04
@hsanders我使用CASE WHEN,希望看到其他方式。 – Jaxedin 2012-07-27 21:04:00