权限系统设计-解决方案介绍

345 阅读7分钟

解决系统的数据权限一直以来都是一个复杂的难题,如今有了专业的解决方案,通过界面配置的方式来将复杂权限简单化,解决99%的权限问题,这就是今天要介绍的项目Snapper权限系统,也是多年实践积累的结果。

项目介绍

Snapper权限系统是一套专业的权限管理系统,不依赖于业务,方便集成,开箱即用,我们只解决权限相关问题,只添加权限相关功能。权限包括资源权限管理和数据权限管理,资源权限管理包括菜单和按钮,数据权限包含功能数据权限、业务数据权限、列数据权限多维度数据权限细粒度控制。

权限配置只需通过界面配置,规则设计器动态嵌入权限代码配置,权限动作动态修改@Action配置 保证权限的实时性

  • 资源权限 每个资源都对应唯一的URL + 请求方法(例如POST请求的/api/user代表新增 PUT请求的/api/user代表更新),按照权限使用分为离散型和复用型,离散型主要针对分散的权限(A用户和B用户的权限分散不重叠或较少重叠),复用型相对统一的权限分配(基于角色的权限分配)
  • 数据权限引入权限动作@Action概念,通过权限动作与功能关联,可以针对每个功能配置数据权限,同时加入自定义业务属性标识功能,针对不同业务属性标识配置不同数据权限

数据权限定义

Snapper权限引入自有的数据权限定义,所有数据权限都可以针对每个功能进行配置,主要包括:

  • 功能数据权限 采用委托模式,配置方式指定用户委托的数据及排除的委托,同时支持时间段生效配置
  • 业务数据权限 功能数据权限无法解决问题的基础上,可用此功能动态拼接条件,系统自动解析SQL,列出对应的表,对不同的表通过条件构建器构建出权限对应的条件,实时生效,完美解决复杂条件难题
  • 列数据权限 通过系统解析SQL功能,解析出每个表所查询的列,通过选择直接控制列权限

系统演示

系统演示 账号/密码(ximen/123456)

功能列表

  • 用户管理 管理系统用户,激活、启用、停用、重置密码、设置标签等功能
  • 角色管理 管理系统的资源权限,分配用户,资源授权等功能
  • 用户组 管理多个用户为一组,集中进行角色分配及数据权限分配
  • 组织架构 管理系统组织架构,分配人员,职位,角色等功能
  • 职位管理 管理组织中的职位,分配职位对应的角色和数据权限等功能
  • 授权管理 从用户和用户组维度,对功能进行功能数据权限、业务数据权限、列数据权限的分配
  • 权限动作 动态修改@Action动作内容,实时修改数据权限配置
  • 权限规则 规则编辑器,动态修改数据权限规则,实时生效
  • 菜单管理 管理系统中的菜单资源和按钮资源,对每个功能进行业务动作关联
  • 数据列 管理业务表中数据列,业务数据权限分配时按照指定列分配
  • 字典管理 管理系统中字典数据,比如用户业务标记,用来与数据权限关联
  • 参数管理 管理系统中的关键参数,比如网站LOGO等
  • 业务日志 管理系统中的日志,包含操作人、操作模块、请求信息、异常信息、浏览器信息等
  • 接入用户 管理第三方接入系统的用户,设置IP段、生效时间段、分配APPID、APPKEY等
  • 接入日志 管理第三方接入系统的日志,包含请求IP、来源系统、浏览器、请求信息、错误信息等
  • 限流管理 配置某些规则进行系统流量限制
  • 租户管理 管理系统中的租户,租户与租户之间进行数据隔离,每个租户可以配置自己的用户、角色、权限等信息
  • 租户菜单 管理租户允许使用的菜单及按钮
  • 租户日志 查看租户操作的业务日志
  • 租户接口 对租户开通相关接口,可用于计费等信息

如何配置权限

Snapper权限系统是通过两种方式解决数据权限问题

  • 职位管理 是解决大部分数据权限的常用场景,通过设置职位的数据权限范围来解决数据权限问题
  • 授权管理 针对特殊的用户或用户组进行数据权限范围的设置,从而达到解决数据权限问题的目的

职位方式的配置数据权限的范围包括:

  • 本人 默认的数据权限范围,能看自己的数据
  • 本人及下属 能看到本人的数据及下属部门的数据
  • 部门全部 能看到本部门所有人的数据
  • 自定义范围 通过指定的方式来看对应指定范围内的数据,此种方式可以进行跨公司查看数据

iShot_2023-11-24_08.37.34.png

授权管理提供更为强大的数据权限管理:

  • 用户维度 控制每个功能的数据权限,包括功能数据权限 业务数据权限 列数据权限
  • 自定义范围 通过指定的方式来查看对应指定范围内的数据,此种方式同样可以进行跨公司查看数据,同时支持自定义时间段,即在自定义时间段内有效。自定义范围支持排除规则,即排除指定的人或组织

iShot_2023-11-24_08.37.01.png

授权管理同时也支持业务数据权限和列数据权限

  • 业务数据权限通过指定列及关键字来追加条件,系统为了防止注入进行了系列处理
  • 列数据权限 针对SELECT操作进行对应的字段排除

项目体系

Snapper权限框架解决的一些通用的权限场景

  • 能看到别人的数据,但不能更新和删除
  • 请假了,生成临时授权码,临时授权给同事帮我做(同一账号授权码登录)
  • 部门经理能看到部门下所有人的数据,A主管负责一二组,只能看到一二组数据
  • 兼职多个小组,不同小组任不同职位,不同职位操作不同数据
  • 对某个用户查看某个功能时隐藏某列数据
  • 实时委托相互绑定,即某个订单客服为A时能看到售后B录入的费用数据,B售后同样能看到A客服录入的费用
  • 查看与”我“关联的(业务关联,比如销售是我,客服是我)数据,同时销售经理和客服经理都分别能看到对应部门数据
  • 临时追加权限条件,查看条件允许数据(比如查看所有供应商为可口可乐的数据)
  • 换人不换职位,不需更改权限(例如张三卸任研发部“技术经理”,李四就任“技术经理”)
  • 人员换部门,不需更改权限(原部门对应的经理将看不到对应的数据,新部门的经理能看到对应的数据)
  • 自定义查看/操作某些人/组的数据,排除某些人/组的数据
  • 某些账号只能单账号登录,某些账号可以账号同时登录
  • 对“销售”人员进行忽略分公司过滤,即只要销售是”我“就是看到数据,不管是哪个分公司的数据
  • 允许某个IP段内的第三方用户查看某些授权(临时授权)数据