天堂向右,我依然向左

天下之大,虽离家千里,何处不可往!何事不可为!
生活之路,纵坎坷曲折,当奋斗不息,则精彩纷呈!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 权限控制五个表一网打尽(文/馒头)

--权限表
select * from dbo.SysRole
--[RoleName,RoleDesc]

--用户表
select * from  dbo.SysUser
--UserName,IsAdmin

--用户与角色的对应表
select * from  dbo.SysRoleMember
--RoleName,UserName

--用户角色与功能菜单的对应表
select * from  dbo.SysUserPermission
--PermissName,PermissType [GroupId | UserId],SectionId

--功能菜单
select * from  dbo.SysSection
--SectionId,SectionName

--如果SysUser.IsAdmin = true 则直接返回所有的SysSection
--
根据权限读取功能菜单
SELECT * FROM SysSection WITH (NOLOCK)
WHERE Exists (
    
SELECT TOP 1 0 FROM SysUserPermission WITH (NOLOCK) 
        
WHERE    SysSection.SectionId = SectionId
                
AND (
                        (PermissType
='GroupId'
                            
AND EXISTS (SELECT TOP 1 0 FROM SysRole WITH (NOLOCK) 
                                        
WHERE Exists (SELECT TOP 1 0 FROM SysRoleMember WITH (NOLOCK) WHERE SysRole.RoleName = RoleName AND UserName='admin')
                                        
AND SysUserPermission.PermissName=RoleName)
                        ) 
                    
OR (
                        PermissType
='UserId' AND PermissName='admin'
                    )
                )
)

posted on 2009-08-26 09:08  老舟  阅读(400)  评论(0编辑  收藏  举报