目前只是实现了 RBAC+ 的表管理(用户、角色、策略、scope),有了这些数据具体如何使用?最好可以提供 sdk 给别的系统
下面提供一份企业级可落地的“RBAC+ 权限使用方案 + SDK 设计”,告诉你:
- 既然 RBAC+ 管理表已经做好(用户、角色、Action、Scope…),业务系统如何实际使用这些权限?
- 如何提供 统一的 SDK(Java 后端为例)让其他系统秒级接入?
- 如何做 API 鉴权、页面鉴权、数据范围控制、前端菜单加载
- 如何保证与后续 SSO、集中认证一致。
这是 IAM 平台最关键的下一步:从“可管理”到“可使用”。
1. permission-plateform 的 RBAC+ 数据模型(你已实现)
你当前的数据模型(简化):
- user
- role
- user_role
- action_definition(功能点:API / 按钮 / 页面)
- role_action
- data_scope_strategy(数据范围策略:本部门、本人、租户、业务线)
- role_data_scope
这些表提供了“权限数据”,但需要一套可供业务系统调用的运行时权限校验机制。
接下来是“如何使用”的核心部分。
2. 权限使用的 4 大核心场景
业务系统一般需要:
① 登录后获取用户权限(页面级)
加载可访问菜单、按钮。
② API 鉴权(后端)
判断用户是否允许调用某 API。
③ 数据范围控制(后端)
例如只能看本部门、本租户的数据——自动拼接 SQL WHERE。
④ 前端功能点控制(按钮隐藏/禁用)
为支持这些场景,需要提供:
- 统一权限 API(由 permission-plateform 提供)
- 统一权限 SDK(给业务系统用)
- 前端权限指令 v-perm 或函数
- 后端 AOP/Interceptor 均可自动校验
下面逐项解释。
3. permission-plateform 对外能力(运行时服务能力)
你需要在 IAM 主服务中提供:
3.1 运行时权限查询 API(对外暴露)
1)查询用户所有角色
GET /iam/runtime/user/{userId}/roles
2)查询用户所有 action 权限(展开后的扁平权限)
GET /iam/runtime/user/{userId}/actions
返回示例:
{
"userId": 1001,
"actions": [
"system:alarm:view",
"system:alarm:edit",
"metrics:dashboard:view"
]
}
3)查询用户数据范围策略
GET /iam/runtime/user/{userId}/data-scope
返回示例:
{
"userId": 1001,
"scopes": [
{
"resource": "alarm",
"scopeType": "DEPARTMENT_AND_SUB",
"extraFilters": {"tenantId": "t1"}
}
]
}
4)查询前端菜单(基于 action 过滤)
GET /iam/runtime/user/{userId}/menus
→ 前端根据返回构建侧边栏菜单。
4. SDK 设计(Java 后端)
为了让业务系统更容易接入,你应该提供:
permission-plateform-sdk
包含:
- 鉴权注解 @RequiresAction
- 数据范围注解 @DataScope(resource=”alarm”)
- API 调用客户端(Feign/RestTemplate)
- 本地缓存(Guava/Caffeine)
- ThreadLocal + PermissionContext
- WebFilter/AOP 拦截器
4.1 SDK 核心能力清单
| 功能 | 方式 | 说明 |
|---|---|---|
| 获取用户权限 | PermissionClient | 查询、缓存用户 action |
| API 权限校验 | @RequiresAction + AOP | 拦截 controller |
| 数据范围控制 | @DataScope + MyBatis Interceptor | 自动拼接 SQL WHERE |
| 菜单加载 | SDK 不做,前端直接调用 IAM API | 统一来源 |
| 上下文注入 | PermissionContext | 当前用户、角色、actions、scope |
5. 后端使用示例(业务系统)
假设业务系统的 API 想要求用户必须有 alarm:view 权限:
@RestController
public class AlarmController {
@RequiresAction("alarm:view")
@GetMapping("/alarm/list")
public Result list(AlarmQuery query) {
return alarmService.list(query);
}
}
SDK 内部 AOP 行为:
- 获取当前 userId(来自登录 JWT)
- 调用 PermissionClient(带本地缓存) → 获取用户所有 actions
- 判断是否包含
alarm:view - 否则抛出 403 Forbidden
6. 数据范围使用示例(数据级权限)
业务场景: 用户只能查看自己负责部门的告警。
在 Service 层或 Mapper 上添加:
@DataScope(resource = "alarm")
public List<Alarm> page(AlarmQuery query) {
return alarmMapper.page(query);
}
MyBatis Interceptor 自动注入 SQL:
例如 scope = 本部门及子部门:
WHERE alarm.dept_id IN (SELECT id FROM dept WHERE parent_path LIKE '1/3/%')
如 scope = 本人(SELF):
WHERE alarm.owner_id = #{currentUserId}
如 scope = 租户(TENANT):
WHERE alarm.tenant_id = #{currentTenantId}
业务系统无需写任何逻辑。
7. 前端使用方式(Vue3 + ElementPlus)
1)页面菜单加载
在 Layout 初始化时:
const menus = await api.get("/iam/runtime/user/menus");
store.setMenus(menus);
2)按钮权限控制(RBAC+ action)
提供一个指令:
app.directive('perm', {
mounted(el, binding) {
const action = binding.value;
if (!store.userActions.includes(action)) {
el.style.display = 'none';
}
}
});
使用:
<el-button v-perm="'alarm:edit'">编辑</el-button>
8. 其他业务系统接入方式
8.1 Java(推荐 SDK)
- @RequiresAction
- @DataScope
- PermissionClient
8.2 Node.js / Python / Go 服务
调用 REST API:
GET /iam/runtime/user/{userId}/actions
在中间件中本地缓存 30 秒即可。
9. 整体架构示意图(文字描述版)
+----------------------------+
| permission-plateform |
| (IAM RBAC+ Engine) |
+------------+---------------+
|
| REST API
|
+------------v---------------------------+
| Business System A |
| - permission-sdk |
| - @RequiresAction |
| - @DataScope |
| - PermissionContext |
+---------------------------------------+
|
|
+------------v---------------------------+
| Business System B (Node/Python/Go) |
| - 调用用户权限 API |
| - 本地缓存 |
+---------------------------------------+
10. 最终总结:你已具备“管理能力”,现在补齐“运行时能力”
你已完成了:
✔ 用户-角色 ✔ 角色-Action ✔ 数据范围策略 ✔ 后台管理 UI ✔ RBAC+ 数据模型
还缺的是:
✔ 如何“使用这些权限” ✔ 如何让业务系统轻松接入 ✔ 如何在 API / 数据范围 / 前端菜单中生效
这份文档已提供:
- 运行时 API
- SDK(Java)
- 前端权限指令
- 数据范围 MyBatis 插件
- API 鉴权 AOP
- 业务方接入流程
你现在可以让任何业务系统在 5 分钟内接入权限体系。
- 目前只是实现了 RBAC+ 的表管理(用户、角色、策略、scope),有了这些数据具体如何使用?最好可以提供 sdk 给别的系统
- 1. permission-plateform 的 RBAC+ 数据模型(你已实现)
- 2. 权限使用的 4 大核心场景
- 3. permission-plateform 对外能力(运行时服务能力)
- 4. SDK 设计(Java 后端)
- 5. 后端使用示例(业务系统)
- 6. 数据范围使用示例(数据级权限)
- 7. 前端使用方式(Vue3 + ElementPlus)
- 8. 其他业务系统接入方式
- 9. 整体架构示意图(文字描述版)
- 10. 最终总结:你已具备“管理能力”,现在补齐“运行时能力”
