M
SAAS权限管理系统| 自定义数据权限功能
自定义数据权限功能
能够实现自定义数据权限功能的管理和控制,提供一个统一的数据权限授权管理页面
支持的数据权限维度
- 机构数据
- 微服务数据
- 前端工程数据
机构数据权限管理
机构数据权限是基础数据权限。
业务场景
- 新入职的员工应该归属于具体的一个部门机构,只能查看自己机构的数据
- 核心骨干需要跨机构管理多个部门,能够查看多个机构的数据
- CTO只管理几个关键的研发机构,但是他能够查看所有研发的下级机构数据
- CEO只管理关键机构,但是他能够查看所有机构的数据
需求分析及解决方案
- 场景1:成员绑定自己所属机构即可
- 场景2:一个成员可以绑定多个机构即可,所以成员和机构是多对多关系
- 场景3:使用方案2来解决会出现几个问题:1)如果有几十个研发机构,CTO需要绑定几十个机构,2)最底层机构的员工一看自己组织机构中尽然有CTO大佬在窥屏,汇报工作是向CTO汇报还是向组长汇报。所以机构设计成树状结构,拥有父级机构权限的人,通过技术手段能够获取子级机构的数据。
- 场景4:使用方案3可以解决,但是如果公司有几千个机构,CEO在查询数据时,后台拼sql时需要 in 几千个数据,效率不好,而且oracle不支持in太多的数据。所以定义,不传机构信息时,默认查所有机构数据。
技术方案
- 成员机构多对多关系
- 授权机构列表为null时,表示无数据权限
- 授权机构列表为空时,表示查所有
- 授权机构列表不为空时,只能查询授权机构的数据
- 能否查询下级机构数据根据角色数据权限控制
角色数据权限
- 所有数据:授权机构列表为空
- 所属机构及下级机构数据:授权机构列表为所属机构及所属机构的下级机构
- 所属机构:授权机构列表为所属机构信息
- 个人数据:授权机构列表为null
效果
用admin1
/123456aA.
账号密码登录管理后台 http://www.nodecollege.com/admin/login,
角色访客-CEO和访客-CTO都是机构成员角色,只授权给了访客机构下的admin1成员
访客-CEO角色 数据权限为所有数据
访客-CTO角色 数据权限为所属机构和下级机构
切换角色到访客-CEO 查看组织机构能看到所有机构数据
切换角色到访客-CTO 查看组织机构只能看到访客机构,及访客机构的下级机构信息
其他数据权限
机构数据权限是基础,但是根据业务不同,也需要对不同业务的数据进行控制
例如本站的微服务和前端工程数据,因为囊中羞涩,无力搭建测试环境,提供的正式环境来进行测试的,但是开源的仅是权限相关的数据,本站还包含博客系统等一些其他数据,这些需要进行隐藏。为此设计了一套单独的数据权限功能。
需求
- 随着业务的发展,可能会有更多维度的数据权限控制,能够对这些不同维度的数据权限进行控制
- 每个维度的数据权限能够方便的授予当前系统的机构和成员
- 每个维度的数据权限能够授予该维度全部数据权限或者部分数据权限
- 不同维度的数据权限其能授权的数据各不一样,可能是动态获取,也可能是固定的,如微服务数据需要动态获取,如性别,只需要写死男和女即可
技术方案
数据权限相关表结构
o_data-power 数据权限表
字段 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
data_power_usage | tinyint | 用途,0-运营/运维,1-2C |
data_power_name | varchar | 名称 |
data_power_code | varchar | 代码 |
data_power_type | tinyint | 数据权限类型 0-机构,1-机构用户 |
data_option | varchar | 数据权限选项 |
o_data_power_auth 数据权限授权表
字段 | 类型 | 说明 |
---|---|---|
id | bigint | 主键 |
data_power_code | varchar | 代码 |
org_code | varchar | 机构代码 |
user_id | bigint | 用户id |
all_data | tinyint | 所有数据,0-否,1-是 |
auth_list | varchar | 授权列表 |
演示
用admin1
/123456aA.
账号密码登录管理后台 http://www.nodecollege.com/admin/login,
切换角色到访客角色,打开微服务接口管理页面,可看到能访问的数据有两百多条
切换角色到访客-系统管理-微服接口角色,打开微服务接口管理页面,可以看到能访问的数据只剩一百多条了,全部都是operate
这个微服务的接口数据。
同理 前端工程管理的数据 也会根据角色的切换显示不同的数据量