权限系统设计的一种解法

用户头像
双城笔录
关注
发布于: 2020 年 05 月 08 日
权限系统设计的一种解法

本篇文章的内容是对在设计权限系统这个过程中的思路和查阅过的资料的整理,初次整理时间是在2019年的7月份。

权限系统相关资料

因为当时没有权限系统的产品设计经验,为了能够快速地了解和学习相关知识,我在网上查阅了很多相关的资料。对自己帮助比较大的资料罗列如下:

RBAC权限模型简述

在查阅资料的过程中,发现被提及最多的权限模型为 RBAC 。RBAC 全称为 Role-Based Access Control,即基于角色的访问控制。简单来说,RBAC 权限模型中主要由三者组成,分别是用户、角色以及权限。通过指定用户为哪些角色以及指定角色用户哪些权限来达到权限控制的目的。



关于 RBAC 通俗易懂的描述见后台产品设计系列:单系统与多系统的用户权限设计(五),而更详尽的描述见权限系统与 RBAC 模型概述

需求初始阶段

在这个阶段具体的功能要做成什么样其实并不清晰。比如权限系统具体要由哪几种角色?权限系统是否需要新增角色?每种角色的权限是通过什么方式来分配的?在这个阶段这些问题都还没有答案。



所以原始的产品需求如下:

  • 面向的用户:主要提供给系统管理员使用;

  • 开发权限系统的目的:对接现有系统,保证数据及操作的安全性;

  • 权限系统能够给不同的用户分配权限,用户据被分配的权限进行操作。

需求的最终确定

通过分析和查阅权限系统相关资料(见上),结合现有系统的实际情况,最后明确了功能设计,最终的需求确定如下:

  • 面向的用户:主要提供给系统管理员使用;

  • 开发权限系统的目的:对接现有系统,保证数据及操作的安全性;

  • 功能设计:权限系统仅由四种角色组成,分别是超级管理员 / 普通管理员 / 普通用户 / 用户子账号,在该系统中不能添加新的角色。

  • 每种角色的权限:

•超级管理员

  1. 可以使用权限后台管理系统

  2. 可以新增用户 & 设置用户的角色

  3. 可以编辑 / 查看所有用户的账号信息

  4. 可以激活 / 禁用所有用户

  5. 可以设置所有用户的访问权限,同时可以批量给用户分配权限

  6. 可以编辑自己的个人信息



•普通管理员

  1. 可以使用权限后台管理系统

  2. 可以新增普通用户 & 普通用户子账号

  3. 可以编辑 / 查看关联普通用户 & 普通用户子账号的账号信息

  4. 可以激活 / 禁用关联普通用户 & 普通用户子账号

  5. 可以设置关联关联普通用户 & 普通用户子账号的访问权限,同时可以批量给关联普通用户 & 普通用户子账号分配自己拥有的权限

  6. 可以编辑自己的个人信息



•普通用户

  1. 可以访问被超级管理员 & 普通管理员设置为允许访问的页面 / 数据

  2. 可以编辑个人信息



•普通用户子账号

  1. 可以访问与普通用户相关联的处于权限许可范围之内的页面 / 数据,

  2. 可以编辑个人信息

数据库表设计及具体的权限实现

  • 默认权限

角色默认的权限通过 django-rest-framework 来规限。在登录前,系统就会判断该用户属于什么角色,属于哪种角色默认就可以访问对应的页面和资源。



  • 被设定的权限

通过数据库表来规限。建立三张数据表,用户表、权限表以及用户权限表。用户表中除了关于用户个人信息的字段还增加了一个角色字段,权限表中包括被允许设定的权限。用户拥有哪些权限就写在了用户权限表里面。用户与权限是多对多的关系。



通过上面默认权限和数据表规限的方式,完成对用户权限的具体实现,用户总权限=所属角色默认权限+被设定的权限。

权限系统与 RBAC 的比较

上述权限系统的功能是参考 RBAC 模型设计的,但是和典型的 RBAC 模型又有较多不同。主要的不同点如下:

  • 角色

  1. 在 RBAC 中被分配创建角色权限的用户可以创建新的角色。

  2. 而在我们的系统中角色不能被创建,只有超级管理员 / 普通管理员 / 普通用户 / 普通用户子账号这四种角色。



  • 用户和角色的关系

  1. 在 RBAC 中每个用户可以作为多种角色,用户和角色是多对多的关系。

  2. 而在我们的系统中每个用户仅可以作为一种角色,用户和角色的关系是一对一的关系。



  • 用户的权限控制

  1. 在 RBAC 中用户的权限完全通过所属的角色来控制,即某种角色被赋予某些权限,某种用户属于某种角色或者某几种角色,那么该用户就拥有了该角色或者该几种角色的权限。

  2. 而在我们的系统中,用户的权限大部分通过所属的角色来控制,但是访问某个页面的权限是管理员针对某个特定的用户来控制的。

  3. 以普通用户为例:属于普通用户这种角色的某个用户,在被创建的时候就拥有编辑个人信息的权限,但是该用户是否有权限访问 A 页面、B 页面或者 C 页面呢?这个就要看超级管理员或者他关联的普通管理员有没有赋予他访问 A 页面、B 页面或者 C 页面的权限了。



当然上述只是权限系统设计的一种解法,并不是唯一的方案。不同的产品其实还是根据实际情况,综合考虑上线时间、人力资源、技术水平、项目环境等因素来权衡选择哪一种设计方案。因为做产品其实也是在寻求约束条件下的最优解。


发现按池建强老师如何写排版优雅简洁的文章?中的三点建议来排版,文章看着确实舒服了很多。



题图:Photo by Free-Photos on Pixabay.com



发布于: 2020 年 05 月 08 日 阅读数: 387
用户头像

双城笔录

关注

beta中。 2017.10.25 加入

走走写写。

评论

发布
暂无评论
权限系统设计的一种解法