跳转到内容

账号、角色与统一授权

Modu 采用用户—角色—权限模型:角色只承载身份与成员关系,实际功能访问由**能力(capability)**决定,菜单按当前主体被授予的能力生成导航。能看到页面或按钮,不代表能读写全部记录;授权精确到能力、数据范围、条件与有效期。

授权管理只有一个入口:授权控制台 /system/authorization,提供六个页签。

页签用途
能力目录按资源分组树形展示全部能力,如「系统管理 / 授权管理」「示例 / 货币」「示例 / 报销」
配置授权以双向穿梭框批量授予或回收业务能力,支持启停状态的能力绑定
查看用户授权查看单个用户的授权投影
权限模拟以指定主体的视角预授权限结果
管理委托配置授权维护者及其可授予的范围上限
变更审计按操作者、对象、能力、动作、时间范围查询授权变更

普通用户可在个人「受限授权」工作台 /account/authorization(头像菜单入口)查看和维护自己被委托范围内的授权。

每条 Grant 记录包含能力、数据范围、条件与有效期;授权数据源唯一,服务端在每次请求时按当前主体重新鉴权。前端隐藏按钮只用于引导用户,服务端仍会重新核对当前授权。

先建立部门与账号,再配置角色。角色页仅管理身份与成员关系,并跳转到统一授权控制台完成能力配置。

角色分配与密码管理都是独立能力:

  • 给用户分配角色需要 system:user:assign-roles,且只能分配白名单内的目标用户与角色。
  • 重置密码是独立能力 system:user:reset-password,对应接口 PUT /users/{id}/password。

用户邮箱为非必填,新增手机号字段,账号可用手机号标识。

数据权限不再有全局的数据范围开关,而是拆分为精确的业务能力。例如:

  • 核心用户读取是独立能力,授予后才能查看用户列表与详情。
  • 示例插件的货币参考(currency:reference)与报销的创建、读取、审批能力各自独立授予。

Agent 查询与业务列表都按当前主体的授权过滤;授权查询投影即强制边界,未授予的能力既不出现在导航中,也不会放行对应接口。内部 DataScope 是单个能力授权计划(Plan)的投影,不是全局角色范围,也不是独立的授权引擎。

维护者可将部分授权职责委托给管理者,并精确约束:接收者、可授予的能力、范围上限、允许的动作(授予、变更、回收)与期限。委托关系的变更会重新鉴权并写入审计。

应用和扩展通过 bootstrap.Options.Authorization 与 AuthorizationDefaults 声明资源、能力、来源与默认安装。应用侧在 server 目录维护授权命令:

终端窗口
go run ./cmd/modu authorization install --maintainers <用户ID>
go run ./cmd/modu authorization catalog
go run ./cmd/modu authorization availability
go run ./cmd/modu authorization maintainers
go run ./cmd/modu authorization set-availability

应用菜单和扩展能力参与安装期的授权事务。重跑安装不会恢复维护者已撤销的授权,也不会擅自恢复已停用的能力绑定。

旧授权 schema(0.11 及更早,含 RBAC 数据范围模型)不支持就地转换;升级必须在新库中显式安装授权并重新授权。迁移步骤见核心升级。

实现自己的业务接口与授权声明,继续阅读后端业务开发。