news 2026/8/9 9:22:23

企业级权限表结构设计经典设计--纯个人分享(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
企业级权限表结构设计经典设计--纯个人分享(二)

xxx理系统权限体系总结与配置指南

根据过往相关的数据表结构、初始数据和AuthController等设计代码,总结了一份完整的权限体系总结与配置指南文档:

文件位置c:\DevOpsK8s\ABC\carbon-manage-platform\PERMISSION_SYSTEM_COMPLETE_GUIDE.md

文档主要内容

一、权限体系概述

  • 基于角色的访问控制(RBAC)模型
  • 多租户(Multi-Tenancy)架构
  • 核心设计理念:最小权限原则、职责分离、租户隔离、灵活配置、审计追踪

二、数据库表结构

  • 核心权限表:sys_tenantsys_usersys_rolesys_permissionsys_user_rolesys_role_permission
  • 权限类型:模块权限、菜单权限、按钮权限

三、认证与授权流程

  • 登录认证流程:用户验证、密码检查、角色验证、JWT令牌生成
  • JWT令牌结构:包含用户名、用户ID、租户ID、用户角色等信息
  • 权限检查流程:令牌验证、权限提取、访问控制

四、从0配置用户权限的详细步骤

  1. 准备工作:确保系统初始化完成,超级管理员账户可用
  2. 创建租户(可选):为新企业或组织创建独立工作空间
  3. 创建权限:按模块、菜单、按钮层次创建权限
  4. 创建角色:根据岗位需求创建角色
  5. 分配角色权限:将权限分配给角色
  6. 创建用户:创建新用户并设置初始密码
  7. 分配用户角色:将角色分配给用户
  8. 验证权限配置:登录验证权限是否正确

五、权限管理最佳实践

  • 权限设计原则:模块化管理、层级分明、命名规范、最小权限、定期审计
  • 常见角色设计:超级管理员、租户管理员、碳分析师、数据采集员、监控操作员等

六、权限问题排查

  • 常见权限错误及解决方案
  • 排查步骤:登录状态、令牌验证、角色分配、权限关联

七、代码实现关键点

  • AuthController核心代码分析:用户认证、角色检查、JWT令牌生成
  • 权限检查实现:Spring Security的@PreAuthorize注解

这份文档提供了完整的权限体系说明和详细的配置步骤,您可以根据实际需求参考使用。(详细文档可私)

地图模块权限配置案例

一、需求分析

  • 新增功能模块:地图模块
    • 主菜单:地图模块
    • 子菜单:地图设备分布、地图事件分布
  • 授权对象
    • 管理角色(假设对应设备管理员角色)
    • 普通查看用户(对应数据查看员角色)

二、详细配置步骤

1. 创建地图模块主权限
-- 创建地图模块主权限(模块级)INSERTIGNOREINTO`sys_permission`(...)VALUES('perm-0050','MAP_MANAGE','地图模块',...);
2. 创建地图设备分布子菜单权限
-- 创建地图设备分布子菜单权限(菜单级)INSERTIGNOREINTO`sys_permission`(...)VALUES('perm-0051','MAP_DEVICE_DISTRIBUTION','地图设备分布',...);
3. 创建地图事件分布子菜单权限
-- 创建地图事件分布子菜单权限(菜单级)INSERTIGNOREINTO`sys_permission`(...)VALUES('perm-0052','MAP_EVENT_DISTRIBUTION','地图事件分布',...);

备注这里使用的是给出角色赋予权限,(还有一种基于用户属性配置权限的方式)


role-0008、 role-0009 这2个的角色赋予权限说明如下

4. 为管理角色分配权限
-- 为设备管理员角色分配地图权限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());
5. 为普通查看用户分配权限
-- 为数据查看员角色分配地图权限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脚本,可直接执行。

六、后续操作

  • 重启后端服务刷新权限缓存
  • 用户重新登录获取最新权限
  • 前端验证菜单显示
  • 验证权限差异

这份文档提供了完整的配置步骤和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;-- 正常应无结果,若有结果则存在跨租户权限泄漏

使用说明:

  1. 执行初始化SQL后,直接运行上述查询即可验证;
  2. 重点关注「无权限角色」「未分配权限」「跨租户权限」查询,若返回结果则说明权限分配存在异常;
  3. 可通过修改WHERE条件中的username「角色编码」等,针对性验证某个用户/角色的权限;
  4. 结合初始化SQL中的「密码说明」,登录系统后可手动操作验证权限是否生效(如超级管理员能访问/system/tenants,租户管理员不能访问)。

这些查询覆盖了权限体系的「创建完整性」「分配正确性」「隔离有效性」,能快速定位初始化过程中的权限相关问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 22:08:17

Qwen命令行工具实战指南:告别Web界面,拥抱终端AI对话新时代

为什么选择CLI?终端AI对话的三大优势 【免费下载链接】Qwen The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud. 项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen 还在为Web界面的卡顿和…

作者头像 李华
网站建设 2026/8/8 17:41:18

系统可观测性重构指南:从传统监控到智能洞察的架构演进

系统可观测性重构指南:从传统监控到智能洞察的架构演进 【免费下载链接】system-design Learn how to design systems at scale and prepare for system design interviews 项目地址: https://gitcode.com/GitHub_Trending/sy/system-design 你是否厌倦了在故…

作者头像 李华
网站建设 2026/8/8 10:04:04

AkVirtualCamera技术深度解析:跨平台虚拟摄像头架构与创新应用

AkVirtualCamera技术深度解析:跨平台虚拟摄像头架构与创新应用 【免费下载链接】akvirtualcamera akvirtualcamera, virtual camera for Mac and Windows 项目地址: https://gitcode.com/gh_mirrors/ak/akvirtualcamera 虚拟摄像头技术正在重塑现代视频通信的…

作者头像 李华
网站建设 2026/8/8 11:19:01

15分钟掌握PDF转Markdown终极方案:告别格式错乱与内容丢失

还在为PDF转Markdown时表格变形、公式错位、排版混乱而头疼吗?MinerU作为一站式开源高质量数据提取工具,能够将PDF精准转换为Markdown和JSON格式,完美保留原始文档的结构与内容。本文将从实际痛点出发,带你快速构建自动化文档处理…

作者头像 李华
网站建设 2026/8/8 21:17:53

开源项目Linly-Talker如何融合LSTM与Transformer进行语音处理?

开源项目Linly-Talker如何融合LSTM与Transformer进行语音处理? 在数字人技术快速落地的今天,一个关键挑战浮出水面:如何让虚拟角色不仅能“说话”,还能说得自然、听得清楚、反应及时?尤其是在嘈杂环境下的语音识别、富…

作者头像 李华
网站建设 2026/8/5 18:44:09

如何快速搭建ESP-HI机器狗:完整的低成本AI机器人终极指南

如何快速搭建ESP-HI机器狗:完整的低成本AI机器人终极指南 【免费下载链接】xiaozhi-esp32 Build your own AI friend 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 还在为传统机器狗动辄上千元的成本而望而却步吗?ESP-HI项目…

作者头像 李华