背景介绍
使用 DataEase 进行权限管控时,需要对企业内每个用户维护资源权限表单。用户的资源权限信息存储于 DataEase 内置 MySQL 数据库中,我们可以通过 SQL 查询出每个用户所拥有的资源权限,并对用户权限进行维护。
表格及字段定义
sys_auth(权限授权表):
权限授权表包含用户所具有权限的基础属性,下表包含 sys_auth 中所需要的字段:授权人员、授权资产、被授权人、授权时间。
其中,【授权资产】和【被授权人】均以 ID 形式存储,因此需要关联其它表格以获取【授权资产名称】,和【被授权人名称】;
【授权时间】以时间戳形式存储,因此需要对该字段进行处理使其以标准时间格式展示。
字段名 | 说明 |
---|---|
id | 主键 |
auth_source | 授权资产 ID |
auth_source_type | 授权资产类型: dataset——数据集 menu——菜单 panel——仪表板 link——数据源 |
auth_target | 授权目标 ID |
auth_target_type | 授权目标类型: user——用户 role——角色 dept——组织 |
auth_time | 授权时间(时间戳形式记录) |
auth_user | 授权用户名 |
sys_auth_detail(授权明细表):
授权明细表包含授权的明细信息,及被授权人获得的权限类型如:管理、授权、查看、导出、使用。
【权限值】包含1,0。用于过滤用户当前可用的权限状态。
字段名 | 备注 |
---|---|
id | 主键 |
auth_id | 授权ID(sys_auth外键) |
privilege_value | 权限值: 1——该权限可正常使用 0——该权限无法使用 |
remark | 权限类型: 基础权限-管理 基础权限-授权 基础权限-查看 基础权限-导出 基础权限-使用 |
sys_user(用户信息表):
通过 sys_auth 表的【auth_target】字段关联sys_user表的 【user_ID】和【dept_ID】字段,可获取 sys_user 表的【nick_name】字段,得到【被授权人的名称】。
字段名 | 备注 |
---|---|
user_ID | 主键,用户ID(可与 sys_auth.auth_target 关联) |
dept_ID | 用户所属部门ID(可与 sys_auth.auth_target 关联) |
nick_name | 昵称 |
sys_role(用户角色关联表):
通过用户角色关联表,可获取被授权角色下的用户ID,以此获得【被授权人的名称】。
字段名 | 备注 |
---|---|
user_ID | 主键,用户ID(可与 sys_auth.auth_target 关联) |
role_ID | 角色 ID(可与 sys_auth.auth_target 关联) |
dataset_table(数据集信息表):
该表包含数据集相关信息,可通过 ID 与 sys_auth 的【auth_source】关联获取数据集的【授权资产名称】。
字段名 | 备注 |
---|---|
id | 主键,数据集ID(可与 sys_auth.auth_source 关联) |
name | 数据集名称 |
sys_menu(系统表):
该表包含系统菜单相关信息,可通过 【menu_id】 与 sys_auth 的【auth_source】关联获取系统菜单的【授权资产名称】。
字段名 | 备注 |
---|---|
menu_id | 主键,系统菜单ID(可与 sys_auth.auth_source 关联) |
title | 菜单标题 |
panel_group(仪表板信息表):
该表包含仪表板相关信息,可通过 ID 与 sys_auth 的【auth_source】关联获取仪表板的【授权资产名称】。
字段名 | 备注 |
---|---|
id | 主键,仪表板ID(可与 sys_auth.auth_source 关联) |
name | 仪表板名称 |
datasource(数据源信息表):
该表包含数据源相关信息,可通过 ID 与 sys_auth 的【auth_source】关联获取数据源的【授权资产名称】。
字段名 | 备注 |
---|---|
id | 主键,数据源ID(可与 sys_auth.auth_source 关联) |
name | 数据源名称 |
需求实现
根据需求寻找到所需的全部字段后可将需求进行细化:查询全部用户的有效被授权资源,以及该用户被授权的时间、被授权的类型。
📢注意:
用户有效资源需用权限值过滤。
用户所拥有的全部权限=他个人所拥有的权限+他的角色拥有的权限+他所在组织拥有的权限。
SELECT t3.name AS '用户名称'
,t1.auth_source_type AS '授权资产类型'
,t4.name AS '授权资产名称'
,t2.remark AS '权限类型'
,t1.auth_time AS '授权时间'
,t1.auth_user AS '授权人'
FROM sys_auth t1
LEFT JOIN sys_auth_detail t2
ON t1.id = t2.auth_id
LEFT JOIN (
SELECT user_id AS 'ID'
,'user' AS type
,nick_name AS 'name'
FROM sys_user
UNION
SELECT dept_id AS 'ID'
,'dept' AS type
,nick_name AS 'name'
FROM sys_user
UNION
SELECT role_id AS 'ID'
,'role' AS type
,nick_name AS 'name'
FROM sys_user p1
RIGHT JOIN sys_role p2
ON p2.role_id = p1.user_id
)t3
ON t1.auth_target_type = t3.type
AND t1.auth_target = t3.ID
LEFT JOIN (
SELECT id AS 'ID'
,`name` AS 'name'
,'dataset' AS 'source_type'
FROM dataset_table
UNION
SELECT menu_id AS 'ID'
,title AS 'name'
,'menu' AS 'source_type'
FROM sys_menu
UNION
SELECT id AS 'ID'
,`name` AS 'name'
,'panel' AS 'source_type'
FROM panel_group
UNION
SELECT id AS 'ID'
,`name` AS 'name'
,'link' AS 'source_type'
FROM datasource
)t4
ON t1.auth_source_type = t4.source_type
AND t1.auth_source = t4.ID
WHERE t2.privilege_value = 1