【最佳实践】分析企业内各用户权限


飞致云 发布于 2024-01-15 / 104 阅读 / 0 评论 /
背景介绍 使用 DataEase 进行权限管控时,需要对企业内每个用户维护资源权限表单。用户的资源权限信息存储于 DataEase 内置 MySQL 数据库中,我们可以通过 SQL 查询出每个用户所拥有的资源权限,并对用户权限进行维护。 表格及字段定义 sys_auth(权限授权表): 权限授权表包

背景介绍

使用 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



是否对你有帮助?