5

不同产品模块中,同一个操作权限是分开配置还是独立配置好?

 2 years ago
source link: https://www.pmcaff.com/discuss/3126497477812288?newwindow=1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

#产品经理挑战赛# day1


肯定是用RBAC啦,说实话,对你这个没有看太懂,不过可以分享下之前做角色权限设计时候的一些心得:

用户和角色管理:ACL到RBAC的转变

在B端定制化软件流行的年代,权限设计通常用的是一种叫做ACL(Access control list)的机制,通过对每一位用户分配相应的权限,实现对使用者的权限管理。这种方式最大的劣势就是可扩展性太差(比如当你要对同类型的用户进行权限修改时,你要进行多次的重复操作),而且对于开发人员来说,代码的可维护性也很低,所以对于日益复杂的业务场景,ACL已经是过时的设计模式。

而当下最流行,就是RBAC(Role-Based Access Control)模式的权限设计,通过加一层的思想,设置不同的角色分配给不同的终端用户,实现更高效的权限管理。

RBAC的用户权限通过管理员进行角色分配。首先产品通常会提供几种默认角色,然后由项目管理员对项目成员进行权限的依次角色授权,来实现产品权限的管理。

那么如果一个很大的公司组织,是不是就要通过大量的重复操作来进行角色授权呢?

这个时候,便有了用户组的概念,即为一群终端用户的集合。比如,在500人+的公司,公司大多数的流程、文档,对于同属于市场部门的人来说,他们的权限可能不会相差很大。所以这个时候,你可以建立一个用户组,然后把相关部门人员设置成组员后,再进行权限的统一管理,从而不再需要大量的重复的设置权限操作。

用户组通常遵循组织结构,一个用户组可能是一个子公司,一个事业群或一个部门。

此外,对于人员多的组织企业,还有一个可能存在的问题,那就是不可能所有的人员都是由一个leader进行管理,所以可能会涉及到多个管理员,于是便有了权限继承的关系,子级管理员继承父级管理员的部分权限用于他所在用户群的权限管理。

现在来看,一个用户,有以下几种被分配权限的方式:

  • 直接被授权某个角色
  • 继承下属权限
  • 属于某个用户组被分配的权限

那么,如果这几种情况都存在,他们优先级应该是什么样的呢?

以Oracle为例,其优先级是这么设计的:(从高到低)

  1. 管理员角色具有最高权限;
  2. 单独分配给单个用户的权限;
  3. 由于处在某一个用户组内获得的权限;(如果一个成员被分配进行不同权限的两个组,那么其权限优先选取限制最少的那个,但如果有关联的权限是none,那么,则选取none为最优先。)
  4. 继承的权限。

页面、操作与数据

有三种常见的权限类别:

  • 页面权限:访问页面或功能;
  • 操作权限:访问页面或功能上的具体操作,受限于页面权限;
  • 数据权限:能够对产品相关数据进行访问,具有独立操作的权限。

权限的优先级也应遵循上述关系。例如,如果某个用户可以访问“ Invite”按钮,但属于该组的用户无法访问“ User List”页面,则页面权限优先。

在大多数情况下,页面和操作的权限是 yes/no,数据权限的常见选项是 Add、 Edit、 Delete 和 Hide (无访问权限)。

可扩展性和独立性

在设计权限的信息体系结构时,我们需要考虑到设计体系的可添加性。如果应用程序有太多的权限,可以引入权限组以使配置访问更加容易,就像用户的用户组一样,将一些权限打包后,再与用户组进行匹配。

平衡颗粒度和易用性

  1. 前端配置的需求:如果应用程序是为具有标准管理系统的特定行业设计的,那么一些权限控制只能在后端编写,不能为用户编辑。
  2. 默认角色和权限:设置一些默认角色和权限可以在很大程度上节省用户的时间,并能够防止一些严重的事故,例如允许客户端查看供应商的利润。
  3. 简化选项:根据用例,尝试简化权限选项。例如,添加、编辑和删除权限可以组合为前端显示的 Edit。对于后端,保留所有选项以保持灵活性可能是一个好主意。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK