前言:权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同用户访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。
1、RBAC简介
RBAC(Role-Based Access Control,基于角色的访问控制),通过角色关联用户,角色关联权限,间接的赋予用户的权限。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。
对于通常的系统而言,存在多个用户具有相同的权限,在分配的时候,要为指定的用户分配相关的权限,修改的时候也要依次的对这几个用户的权限进行修改,有了角色这个权限,在修改权限的时候,只需要对角色进行修改,就可以实现相关的权限的修改。这样做增加了效率,减少了权限漏洞的发生。
2、什么是权限
权限是资源的集合,这里的资源指的是软件中的所有的内容,即,对页面的操作权限,对页面的访问权限,对数据的增删查改的权限。举个栗子。对于下图中的系统而言,
拥有计划管理,客户管理,合同管理,出入库通知单管理,粮食安全追溯,粮食统计查询,设备管理这几个页面,对这几个页面的访问,以及是否能够访问到菜单,还有相关操作都属于权限。
3、用户组的使用
对于用户组来说,是把众多的用户划分为一组,进行批量授予角色,即,批量授予权限。举个栗子,对于部门来说,一个部门拥有一万多个员工,这些员工都拥有相同的角色,如果没有用户组,可能需要一个个的授予相关的角色,在拥有了用户组以后,只需要,把这些用户全部划分为一组,然后对该组设置授予角色,就等同于对这些用户授予角色。
优点:减少工作量,便于理解,增加多级管理等。
4、实体间的关系
现在有三个实体:用户、角色、权限,首先我们搞清楚他们之间的关系是什么
假设
用户有:张三、李四、王五
角色有:超管、普管、会员
权限有:删帖、看帖、
用户与角色多对多:张三可以既是超管又是普管;张三、李四都可以是普管;
角色与权限多对多:超管既可以删帖又可以看帖;超管、普管、会员都可以看帖。
需要维护的表
由上可知,为了维护这三个实体(用户、角色、权限),另外还要维护两个多对多的关系,我们便有了五张表:
用户表 user_info
用户角色关系表 user_role_info
角色表 role_info
角色权限关系表 role_permission_info
权限表 permission_info
5、RBAC经典五张表
大致用到5张表:三张主表,两张从表
主表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)
从表:用户角色表(UserRole)、角色菜单表(RoleMenu)。
各表的大体表结构如下:
①、用户表(UserInfo):Id、UserName、UserPwd
②、角色表(RoleInfo):Id、RoleName
③、权限表(PermissionInfo):Id、PermissionName
④、用户角色表(UserRole):Id、UserId、RoleId
⑤、角色权限表(RolePermission):Id、RoleId、PermissionId