基于角色的访问控制(RBAC)是实施面向企业安全策略的一种有效的访问控制方式。
其基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。
基本概念
RBAC认为权限授权实际上是Who、What、How的问题。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What(Which)进行How的操作”。
Who:权限的拥用者或主体(如Principal、User、Group、Role、Actor等等)
What:权限针对的对象或资源(Resource、Class)。
How:具体的权限(Privilege,正向授权与负向授权)。
Operator:操作。表明对What的How操作。也就是Privilege+Resource
Role:角色,一定数量的权限的集合。权限分配的单位与载体,目的是隔离User与Privilege的逻辑关系.
Group:用户组,权限分配的单位与载体。权限不考虑分配给特定的用户而给组。组可以包括组(以实现权限的继承),也可以包含用户,组内用户继承组的权限。User与Group是多对多的关系。Group可以层次化,以满足不同层级权限控制的要求。
RBAC的关注点在于Role和User, Permission的关系。称为User assignment(UA)和Permission assignment(PA).关系的左右两边都是Many-to-Many关系。就是user可以有多个role,role可以包括多个user。
简单的说在用户和资源之间引入了一个角色,不直接把用户和资源关联起来,而是用角色和用户之间关联,角色和资源之间关联,在创建用户时给用户分配一个角色,而不是直接给他分配权限,而角色会对应相应的可以访问的资源,而资源里放的就是所能使用的权限。
如下图:
数据库设计:
一个用户可以对应多个角色、一个角色也可以对应多个用户,一个角色可以访问多个资源,一个资源也可以被多个角色共同使用。所以用户和角色、角色和资源之间都是多对多的关系
用户表字段一般有以下几个:
主键id、账号、密码、邮箱、性别等。
角色表字段一般有:
主键id、角色名称、角色描述字段
用户和角色之间的关联表:
用户id、角色id
资源表字段一般有:
主键id、菜单名称、父级菜单id、url路径、菜单图标、权限字符串(唯一功能点:可选)
资源表和角色表之间的关联表:
菜单id、角色id
在进行关联表之间的更新操作时:采用先删除后添加
通过以上的数据库设计,进行rbac权限设计(模型示例系统)模型系统图如下: