mengstack-website/guide/rbac.md
MengStack Dev fca3326e34 docs: 官网文档全面更新 — M2-M8 指南 + API 参考 + v0.2.0 更新日志
- 更新 changelog.md: v0.2.0 记录 M2-M8 全部完成,路线图更新
- 新增 5 篇指南: RBAC、组织管理、审计日志、通知模块、质量横切
- 新增 5 篇 API 文档: RBAC(11)、Org(5)、Audit(1)、Settings(7)、Notification(7)
- 更新 api/overview.md: 完整 37 端点列表
- 更新 config.ts: 侧边栏分组 + 11 页 SEO 元数据
2026-10-03 01:55:55 +08:00

3.1 KiB
Raw Blame History

title
RBAC 权限模型 | 角色权限管理与中间件鉴权 - MengStack官方文档

RBAC 权限模型

MengStack 内置基于角色的访问控制(RBAC)模块,支持多租户隔离下的权限管理。

数据模型

RBAC 由 4 张核心表组成:

表 说明 关键字段
permissions 权限定义 code(唯一码)、name、module
roles 角色定义 tenant_id、name、is_system
role_permissions 角色-权限关联(多对多) role_id、permission_id
user_roles 用户-角色关联 user_id、tenant_id、role_id
Permission ←→ Role ←→ User
   (M:N)        (M:N)

权限码规范

权限码采用 模块:资源:动作 三段式命名:

auth:user:read        # 查看用户
auth:user:write       # 编辑用户
rbac:role:manage      # 管理角色
org:tenant:manage     # 管理租户
notification:send     # 发送通知

种子数据

框架启动时自动创建预置角色和权限:

角色 说明 权限范围
admin 管理员(系统角色,不可删除) 全部权限
editor 编辑者 内容读写 + 通知
viewer 查看者 只读权限

使用方式

1. 给用户分配角色

curl -X POST http://localhost:2222/api/v1/rbac/users/1/roles \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-ID: <tenant_id>" \
  -H "Content-Type: application/json" \
  -d '{"role_id": 1}'

2. 为角色设置权限

curl -X PUT http://localhost:2222/api/v1/rbac/roles/1/permissions \
  -H "Authorization: Bearer <token>" \
  -H "X-Tenant-ID: <tenant_id>" \
  -H "Content-Type: application/json" \
  -d '{"permission_ids": [1, 2, 3]}'

3. 在路由中使用权限中间件

// 在 routes.go 中
rbac.GET("/users", h.ListUsers, permMW.Require("auth:user:read"))
rbac.POST("/users", h.CreateUser, permMW.Require("auth:user:write"))

permMW.Require() 会从 JWT 中提取用户 ID 和租户 ID,查询该用户在此租户下的所有角色权限并集,判断是否包含所需权限码。

多租户隔离

  • 角色按 tenant_id 隔离,不同租户的角色互不影响
  • 用户角色关联也按 tenant_id 隔离,同一用户在不同租户可拥有不同角色
  • 权限定义是全局共享的(不区分租户)

API 端点

方法 路径 说明
GET /api/v1/rbac/permissions 列出权限(可按 module 筛选)
POST /api/v1/rbac/roles 创建角色
GET /api/v1/rbac/roles 列出角色
GET /api/v1/rbac/roles/:id 获取角色详情
PUT /api/v1/rbac/roles/:id 更新角色
DELETE /api/v1/rbac/roles/:id 删除角色
PUT /api/v1/rbac/roles/:id/permissions 设置角色权限
GET /api/v1/rbac/roles/:id/permissions 获取角色权限
POST /api/v1/rbac/users/:userId/roles 分配角色给用户
DELETE /api/v1/rbac/users/:userId/roles/:roleId 移除用户角色
GET /api/v1/rbac/users/:userId/roles 获取用户角色

详细接口参数见 RBAC API 参考。