2026年西安高档礼品回收指南:选对商家不踩坑
2026/6/5 22:47:57
根据过往相关的数据表结构、初始数据和AuthController等设计代码,总结了一份完整的权限体系总结与配置指南文档:
文件位置:c:\DevOpsK8s\ABC\carbon-manage-platform\PERMISSION_SYSTEM_COMPLETE_GUIDE.md
sys_tenant、sys_user、sys_role、sys_permission、sys_user_role、sys_role_permission这份文档提供了完整的权限体系说明和详细的配置步骤,您可以根据实际需求参考使用。(详细文档可私)
-- 创建地图模块主权限(模块级)INSERTIGNOREINTO`sys_permission`(...)VALUES('perm-0050','MAP_MANAGE','地图模块',...);-- 创建地图设备分布子菜单权限(菜单级)INSERTIGNOREINTO`sys_permission`(...)VALUES('perm-0051','MAP_DEVICE_DISTRIBUTION','地图设备分布',...);-- 创建地图事件分布子菜单权限(菜单级)INSERTIGNOREINTO`sys_permission`(...)VALUES('perm-0052','MAP_EVENT_DISTRIBUTION','地图事件分布',...);备注这里使用的是给出角色赋予权限,(还有一种基于用户属性配置权限的方式)
role-0008、 role-0009 这2个的角色赋予权限说明如下
-- 为设备管理员角色分配地图权限INSERTIGNOREINTO`sys_role_permission`VALUES('role-0008','perm-0050',NOW());-- 分配子菜单权限...INSERTIGNOREINTO`sys_role_permission`VALUES('role-0008','perm-0051',NOW());INSERTIGNOREINTO`sys_role_permission`VALUES('role-0008','perm-0052',NOW());-- 为数据查看员角色分配地图权限INSERTIGNOREINTO`sys_role_permission`VALUES('role-0009','perm-0050',NOW());-- 分配子菜单权限...INSERTIGNOREINTO`sys_role_permission`VALUES('role-0009','perm-0051',NOW());INSERTIGNOREINTO`sys_role_permission`VALUES('role-0009','perm-0052',NOW());提供了验证权限创建和角色权限分配的SQL查询语句。
文章最后提供
为地图模块添加按钮权限(导出设备分布、搜索事件)并分配给相应角色。
文字最后提供
包含所有配置的完整SQL脚本,可直接执行。
这份文档提供了完整的配置步骤和SQL语句,您可以根据实际情况调整角色ID和权限参数。
全面的权限验证查询,涵盖「角色权限明细核对」「用户实际权限穿透查询」「权限分配完整性校验」等场景,方便快速验证权限创建和角色分配是否符合预期:
查看每个角色具体拥有哪些权限(含权限层级、类型、URL),直接核对权限分配是否正确:
-- 角色-权限明细清单(按租户、角色分组)SELECTt.`name`AS租户名称,r.codeAS角色编码,r.`name`AS角色名称,p.parent_idAS父权限ID,p.codeAS权限编码,p.`name`AS权限名称,p.resource_typeAS资源类型,-- MODULE/MENU/BUTTONp.resource_urlAS权限URL,p.resource_methodAS请求方式FROMsys_role rJOINsys_tenant tONr.tenant_id=t.idJOINsys_role_permission rpONr.id=rp.role_idJOINsys_permission pONrp.permission_id=p.idORDERBYt.id,r.id,p.parent_id,p.sort_order;模拟用户登录后的实际权限范围,验证「用户→角色→权限」的穿透关系是否正确:
-- 单个用户的完整权限清单(以超级管理员为例,可替换username)SELECTu.usernameAS用户名,u.real_nameAS真实姓名,t.`name`AS所属租户,r.`name`AS角色名称,p.codeAS权限编码,p.`name`AS权限名称,p.resource_typeAS资源类型,p.resource_urlAS访问URLFROMsys_user uJOINsys_tenant tONu.tenant_id=t.idJOINsys_user_role urONu.id=ur.user_idJOINsys_role rONur.role_id=r.idJOINsys_role_permission rpONr.id=rp.role_idJOINsys_permission pONrp.permission_id=p.idWHEREu.username='superadmin'-- 可替换为其他用户(如analyst001、collector001)ORDERBYp.parent_id,p.sort_order;-- 所有用户的权限数量统计(快速排查权限缺失)SELECTu.usernameAS用户名,u.real_nameAS真实姓名,t.`name`AS所属租户,COUNT(DISTINCTp.id)AS拥有权限总数FROMsys_user uJOINsys_tenant tONu.tenant_id=t.idJOINsys_user_role urONu.id=ur.user_idJOINsys_role rONur.role_id=r.idJOINsys_role_permission rpONr.id=rp.role_idJOINsys_permission pONrp.permission_id=p.idGROUPBYu.id,u.username,u.real_name,t.`name`ORDERBYt.id,u.username;验证是否存在「角色无权限」「权限未分配给任何角色」「用户无角色」等异常情况:
-- 1. 检查无权限的角色(正常应无结果,除非刻意配置空角色)SELECTr.codeAS角色编码,r.`name`AS角色名称,t.`name`AS租户名称FROMsys_role rJOINsys_tenant tONr.tenant_id=t.idLEFTJOINsys_role_permission rpONr.id=rp.role_idWHERErp.permission_idISNULL;-- 2. 检查未分配给任何角色的权限(正常应无结果,除非冗余权限)SELECTp.codeAS权限编码,p.`name`AS权限名称,p.resource_typeAS资源类型FROMsys_permission pLEFTJOINsys_role_permission rpONp.id=rp.permission_idWHERErp.role_idISNULL;-- 3. 检查无角色的用户(正常应无结果,所有用户都应分配角色)SELECTu.usernameAS用户名,u.real_nameAS真实姓名,t.`name`AS所属租户FROMsys_user uJOINsys_tenant tONu.tenant_id=t.idLEFTJOINsys_user_role urONu.id=ur.user_idWHEREur.role_idISNULL;验证不同模块、不同类型(按钮/菜单/模块)的权限分配情况:
-- 按权限模块统计各角色的权限数量SELECTr.`name`AS角色名称,parent_p.`name`AS权限模块,-- 顶层模块(如系统管理、碳数据管理)COUNT(DISTINCTp.id)AS模块下权限总数FROMsys_role rJOINsys_role_permission rpONr.id=rp.role_idJOINsys_permission pONrp.permission_id=p.idJOINsys_permission parent_pONp.parent_id=parent_p.id-- 关联顶层模块GROUPBYr.id,r.`name`,parent_p.id,parent_p.`name`ORDERBYr.id,parent_p.sort_order;-- 按资源类型(MODULE/MENU/BUTTON)统计权限分布SELECTp.resource_typeAS资源类型,COUNT(DISTINCTp.id)AS权限数量,GROUP_CONCAT(DISTINCTp.code SEPARATOR',')AS权限编码示例FROMsys_permission pGROUPBYp.resource_type;验证不同租户的角色/权限是否隔离,避免跨租户权限泄漏:
-- 验证租户权限隔离(确保租户A的角色无法访问租户B的权限)SELECTt1.`name`AS角色所属租户,r.codeAS角色编码,t2.`name`AS权限所属租户,p.codeAS权限编码FROMsys_role rJOINsys_tenant t1ONr.tenant_id=t1.idJOINsys_role_permission rpONr.id=rp.role_idJOINsys_permission pONrp.permission_id=p.idJOINsys_tenant t2ONp.tenant_id=t2.idWHEREt1.id!=t2.id;-- 正常应无结果,若有结果则存在跨租户权限泄漏WHERE条件中的username「角色编码」等,针对性验证某个用户/角色的权限;/system/tenants,租户管理员不能访问)。这些查询覆盖了权限体系的「创建完整性」「分配正确性」「隔离有效性」,能快速定位初始化过程中的权限相关问题。