升鲜宝 生鲜配送供应链管理系统 SaaS Admin 权限体系完整架构图

目标:

🔥 RBAC + 菜单权限 + API 权限 + 数据权限 四层融合
🔥 支持平台运营多角色
🔥 支持多租户 SaaS 数据隔离
🔥 可扩展到微服务

一、整体权限体系五层架构图
┌──────────────────────────────────────────┐
│              SaaS Admin 前端            │
│         Vue3 动态菜单 + 按钮控制        │
└──────────────────────────────────────────┘
                      │
                      ▼
┌──────────────────────────────────────────┐
│           Admin API 网关层              │
│     JWT 认证 + Token 校验 + 登录拦截    │
└──────────────────────────────────────────┘
                      │
                      ▼
┌──────────────────────────────────────────┐
│         权限控制层(Security Layer)    │
│                                          │
│  ① RBAC 权限校验                        │
│  ② API 权限校验                         │
│  ③ 菜单权限控制                         │
│  ④ 数据权限 SQL 注入                    │
└──────────────────────────────────────────┘
                      │
                      ▼
┌──────────────────────────────────────────┐
│           业务服务层(Service)         │
│     Tenant / Billing / Pricing 等       │
└──────────────────────────────────────────┘
                      │
                      ▼
┌──────────────────────────────────────────┐
│           SaaS 平台数据库               │
│ sys_user / sys_role / sys_permission    │
│ sys_menu / sys_role_data_scope          │
└──────────────────────────────────────────┘

  

 

二、核心权限模型关系图(ER 逻辑)

 
sys_user │ ├── sys_user_role ── sys_role │ ├── sys_role_permission ── sys_permission │ └── sys_role_data_scope │ ▼ 数据权限范围

三、权限分层结构说明


1️⃣ 第一层:认证层(Authentication)

技术实现

  • JWT Token

  • 登录校验

  • Token 解析

  • 登录态存入 ThreadLocal

认证流程图

 
用户登录 ↓ 密码校验 ↓ 生成 JWT ↓ 前端保存 ↓ 每次请求带 Token ↓ 解析 userId / roleIds

2️⃣ 第二层:RBAC 权限控制层

控制目标

  • 谁可以访问哪个接口

  • 谁可以点击哪个按钮

  • 谁可以看到哪个菜单


控制逻辑

 
用户 ↓ 角色 ↓ 权限点(perm_value) ↓ 接口拦截 @PreAuthorize("hasAuthority('saas:tenant:create')")

3️⃣ 第三层:菜单权限(前端可视化控制)

数据来源

  • sys_menu

  • sys_permission

动态菜单加载

 
登录成功 ↓ 查询角色拥有的 menu_id ↓ 生成树结构 JSON ↓ 返回前端 ↓ Vue 动态渲染路由

4️⃣ 第四层:API 权限校验

控制方式

后端方法级控制:

 
@PreAuthorize("hasAuthority('saas:billing:invoice:recalc')") public void recalcInvoice() { }

5️⃣ 第五层:数据权限层(最关键)

控制维度

维度示例
tenant_id 只能看负责的租户
shard_id 只能看指定分片
module_code 只能看 POS 客户

数据权限架构图

 
Service ↓ Mapper ↓ MyBatis Interceptor ↓ 自动拼接 WHERE 条件

四、完整权限控制流程图

 
请求到达 ↓ Token 解析 ↓ 加载用户信息 ↓ 加载角色 ↓ 校验接口权限 ↓ 执行方法 ↓ SQL 执行前 ↓ 数据权限注入 ↓ 返回结果

五、权限粒度设计矩阵

控制层控制对象存储表
登录 用户身份 sys_user
菜单 页面显示 sys_menu
按钮 页面操作 sys_permission
API 接口调用 sys_permission
数据 行级过滤 sys_role_data_scope

六、典型角色权限示例


超级管理员

  • 全部菜单

  • 全部接口

  • 全部租户

  • 全部分片


运营管理员

  • 租户中心

  • 套餐中心

  • 授权管理

  • 只能看自己负责租户


财务管理员

  • 账单中心

  • 支付中心

  • 报表中心

  • 无法修改套餐


客服

  • 租户列表

  • 冻结解冻

  • 不可修改价格


七、数据权限示例

情景:运营 A 只负责 3 个租户

sys_role_data_scope:

 
role_id = OPS_ADMIN scope_type = 2 scope_value = 1001 scope_value = 1002 scope_value = 1003

自动拼接:

 
WHERE tenant_id IN (1001,1002,1003)

八、企业级增强架构图(推荐)

 
┌──────────────┐ │ SpringSecurity│ └──────┬───────┘ │ ┌──────▼────────┐ │ 权限表达式引擎 │ └──────┬────────┘ │ ┌──────▼────────┐ │ DataScope 组件 │ └──────┬────────┘ │ ┌──────▼────────┐ │ MyBatis拦截器 │ └──────┬────────┘ │ ┌──────▼────────┐ │ SQL AST 重写 │(JSqlParser 推荐) └───────────────┘

九、权限与 SaaS 多租户的关系

重要区分:

类型作用
tenant_id(业务隔离) 每租户一个数据库
sys_role_data_scope 平台运营数据范围
MyBatis tenant_id 插件 业务系统隔离
Admin 数据权限 运营隔离

十、最终完整权限体系总结

你现在拥有:

✅ 用户体系
✅ 角色体系
✅ 菜单体系
✅ API 权限体系
✅ 数据权限体系
✅ 审计体系

这已经是 企业级 SaaS Admin 权限架构

posted @ 2026-02-13 13:50  升鲜宝生鲜供应链系统  阅读(6)  评论(0)    收藏  举报