权限系统的设计一直是软件行业的核心,权限=功能权限+数据权限,RBAC用户、角色、权限、组设计方案是一套通用权限管理体系。
这个方案大致用到5张表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)、用户角色表(UserRole)、角色菜单表(RoleMenu)。
各表的大体表结构如下:
用户表(UserInfo):Id、UserName、UserPwd
角色表(RoleInfo):Id、RoleName
菜单表(MenuInfo):Id、MenuName
用户角色表(UserRole):Id、UserId、RoleId
角色菜单表(RoleMenu):Id、RoleId、MenuId
最关键的地方是,某个用户登录时,如何查找该用户的菜单权限?其实一条语句即可搞定,假如用户的用户名为zhangsan,则他的菜单权限查询如下:
Select m.Id,m.MenuName from MenuInfo m ,UserInfo u UserRole ur, RoleMenu rm Where m.Id = rm.MenuId and ur.RoleId = rm.RoleId and ur.UserId = u.Id and u.UserName = 'zhangsan'
六维权限管控模型
该体系从组织范围、角色范围、动作范围、模块范围、触控对象、数据范围6个维度,实现对角色权限的精准控制。
作为系统管理员,可以根据实际的情况,定义角色组,然后将模块权限赋权给特定的二级管理员,直至分配到特定的表单字段。超级管理员(固定的)、角色、部门、用户、模块、字段之间是动态组合的关系。
角色可以针对部门设立,也可以针对菜单和模块设立。赋权角色,用于向同级管理员分配数据维护权限。针对页面的操作权限分完全控制、禁止、只读、编辑四种。部门上可以分为总部、分部(分公司)、部门、员工。可以设立特别权限组,即某个标识好的角色,然后进行赋权和分权。