RBAC权限设计

基于角色的访问控制(Role-Based Access Control)为目前最为广泛接受的权限模型。

该模型可以分解为三个基本概念:

用户 (User, 动作主体)
角色 (Role, 用户与权限的代理层)
权限 (Permission, 表示对资源的一个操作权限)

RBAC引入了角色(Role)的概念,隔离了用户与权限的操作。

用户与角色相关联,可以为用户分配角色

角色与权限相关联,可以为角色分配权限

用户通过成为某个角色而得到这个角色的权限,这样就简化了权限的管理。

关系表如下图:

RBAC权限设计_第1张图片

我们可以将多个用户分配为文章发布者的角色,这些用户就具有文章发布者角色的所有权限,他就可以发布文章。
如果想让某个文章发布的人具有审核文章的权限,我们可以为他添加文章审核角色。这样这个用户就同时具有两个角色的所有权限,既可以发布文章,也可以审核文章。
RBAC的权限设计可以控制这样细粒度的操作权限。

假设遇到这样一个场景,新闻发布者具有省级和市级的区分,省级的新闻发布者可以查看并修改市级的新闻发布者所发布的文章,而市级的新闻发布者只能查看并修改自己的文章。

这时候我们就需要引入角色组的概念,来满足更加细粒度的权限控制。

和计算机操作系统的用户组概念一样,将多个用户分配成一个用户组,然后为该用户组分配角色权限。

基于RBAC的权限设计将用户使用角色来管理,所以我们这里不再使用用户组概念,而是引入角色组概念。 对不同角色进行管理。

我们新增一个部门关系表,用来表示并区分不同角色所属的部门,以及部门的层级关系。


RBAC权限设计_第2张图片

可以看到在角色表上方多个了部门信息表,并且设置了部门启用状态。
同样的我也新增了一张登录信息表,将用户的账号密码和账号启用状态放在该表中。
登录信息表主要用来登录,所以不需要用户信息表里的信息。
我们可以为该用户的登录账号设置启用和禁用来专门管理特定的账号。
我们也可以为某个部门的状态设置启用和禁用来管理整个部门下所有角色的状态。

到此,我们就完成了更加细粒度的角色控制。

我的开源项目,基于Spring Boot 的内容管理系统cms-boot 已经实现上述 RBAC的权限设计。
github地址:https://github.com/lanshiqin/cms-boot
博客地址:https://www.lanshiqin.com/
欢迎点赞 打赏 关注!

你可能感兴趣的:(RBAC权限设计)