权限系统设计-职位设计

105 阅读5分钟

前言

职位是权限的纽带,不仅能关联角色资源权限还能关联委托数据权限!

职位在权限系统中是容易被忽略的一个点,笔者调研过很多的权限系统,职位大多都是用来展示的,未参与权限的管理。

上一章 权限系统设计-组织设计我们讨论了职位能够做到换人不换岗,本章详细讨论下职位的设计。

职位设计

依照惯例,我们从属性、功能和关联关系三个维度来思考职位的设计:

  • 属性设计 职位大概包括 ID、职位名称、所在组织、状态、备注说明等等
  • 功能设计 职位的增删改查、启用、停用
  • 关联关系 与组织关联参与业务(依托组织才有意义),与角色关联进行资源权限分配,与数据权限关联(数据权限范围)

经过梳理后,形成以下花型图: 花型图-职位.png

通过花型图,我们总结如下:

  • 属性设计中 绿色部分为业务相关的属性;虚线部分为预留字段,主要用来参与业务需求及工作流需求,其中权限范围用来配置数据权限;蓝色部分审计属性,用来进行数据权限过滤及日志审计。
  • 功能设计中 橙色部分为职位管理功能,红色部分为状态管理,蓝色部分为关联功能,主要用于资源权限。数据权限的设置在管理功能的新增或修改中体现。

职位属性

职位属性.png

职位在属性设计上很简单,具体如下:

  • ID 没有实际意义,主要满足框架的通用操作(增删改查)
  • 职位名称 同一组织下不允许重复
  • 组织 职位位于当前的组织,与组织是单向一对一关联
  • 状态 职位的状态管理,失效后资源权限和数据权限不生效
  • 权限范围 职位的数据权限范围
  • 备注 职位的备注说明信息
  • 是否主管 主要针对业务处理,满足某些业务需求。同时在工作流中满足按照职位审批等需求

注意审计属性中的创建人组织组织属性的区别,审计属性不再讨论,具体请查看 权限系统设计-组织设计中的审计属性

权限范围

数据权限范围代表的是数据权限,是角色对应的所有资源的数据权限,而不是针对特定的功能,特定功能的数据权限在后续授权管理中讨论

属性中的权限范围表示的是数据权限范围,在职位中的数据权限范围包含如下几:

  • 本人 仅能查看本人创建的数据
  • 本人及下属 能查看本人创建的数据及其下属部门所有人创建的数据
  • 部门全部 能查看本部门所有人创建的数据
  • 自定义 根据具体情况自定义选择查看部门或人员创建的数据

数据权限的本质是委托,分为用户委托和组织委托(具体后续章节讨论),部门全部、本人及下属使用的是组织委托,自定义权限范围通过计算后具体确定,一般包含组织委托和用户委托(如果每个部门未选择全部用户),具体通过范围图来展示:

职位数据权限范围.png

以销售部赵佶为例:

  • 本人 代表赵佶本人
  • 本人及下属 红色虚框表示部分,包括本人及子部门所有人员,不包括同级人员(例如胡燕和李萱)
  • 部门全部 整个销售部所有人员
  • 自定义 例如李萱为一部组长,此时可设置新职位“一部组长”,数据权限范围为自定义,勾选销售一部所有人员

注意:自定义数据权限范围时,通过加载权限内的组织来自定义设置,权限内的组织默认只能查看当前用户所在组织及其下级组织,也就是说自定义权限范围加载的组织树只能是当前用户的组织及组织的所有下属组织(组织列表也有数据权限,对于预设的后台管理员此功能一般都能看到全部数据,防止用户为自己扩大权限 【权限窃取】),要扩大权限范围需要再授权管理功能中针对组织列表功能来设置数据权限,具体在后续章节讨论。

数据权限过滤默认为过滤当前公司,即设置本人及下属、部门全部时,会追加本公司的条件过滤,当设置为自定义时,会取消追加本公司的条件过滤,可以做到跨公司查看数据,这对某些业务场景尤其有用,具体在后续章节讨论。

职位功能

职位功能.png

职位的功能相对简单,具体如下:

  • 新增 选中一个组织,新增一个职位,即职位新增时必须指定组织
  • 修改 修改职位的信息(名称、备注、权限范围)
  • 删除 由于职位涉及到资源权限和数据权限,此操作有一定的风险
  • 查询 按照条件查询对应的职位(位于组织树中,查询组织树)
  • 明细 查看职位的明细信息
  • 角色 设置职位对应的角色,可设置多个角色,设计角色后拥有角色对应的资源权限(多个角色资源权限并集)
  • 停用 职位停用后对应的资源权限和数据权限失效
  • 启用 启用停用后的职位,使之生效

为防止数据权限窃取资源权限窃取 在加载对应的数据时都配置了数据权限,默认只能查看当前权限范围内的数据,比如 职位设置角色,只能查看当前登录人拥有数据权限的角色(一般预设的管理员都能查看全部)

总结

以上介绍了职位的设计包括功能设计和属性设计,也介绍了职位的数据权限设置(通过权限范围)及其资源权限设置(通过角色),下一章开始角色的设计讨论