Skip to content

2.2 角色管理

管理系统角色与组织自定义角色。访问控制按角色名称字符串匹配生效。

进入路径:左侧主导航 → 管理后台 → 权限管理。 路径:/admin/permissions权限: super_admin

ℹ️ 权限点(Permission)系统已于 2026-05-22 下线。平台不再有独立的 Permission(权限点)对象,也没有"资源 × 操作 × 范围"三元组。访问控制改为按角色名称字符串匹配:admin / owner / super_admin / member(以及任意自定义角色名)。本页只剩"角色列表"一项功能。


2.2.1 页面结构

整页只有一个 角色列表(无 Tab、无权限点 CRUD、无权限分配双列、无统计卡片)。

截图:角色管理页


2.2.2 角色列表

表格列

说明
名称角色名称(代码形式,鉴权依据),如 admin / kb_curator
显示名中文名
类型自定义 / 组织 / 系统
组织角色所属组织(系统角色为空/全局)
系统角色是否内置系统角色(内置不可删)
启用启用 / 禁用
操作编辑 / 删除(系统角色删除 disabled)

系统内置角色

角色名含义
super_admin超管,所有权限
owner组织拥有者,组织内所有权限
admin组织管理员,组织内管理权限
member普通成员,只能用资源、不能配资源

系统角色不可删除,但可以禁用。

创建/编辑角色对话框

字段创建后可改必填说明
角色名称代码形式,如 kb_curator创建后不可修改,是鉴权依据
显示名中文名
描述
类型自定义 / 组织 / 系统(仅创建时可选)

⚠️ 标 ❌ 的字段创建后不可改。角色名称错了只能删除重建。


2.2.3 访问控制模型(关键)

平台访问控制按 角色名称 字符串匹配:

  • 内置识别名:admin / owner / super_admin / member(后端依赖如 require_admin() 直接对这些名字做字符串比对)
  • 自定义角色名:可自由创建,用于业务侧岗位区分(如 kb_curator)
  • 平台不再有独立的 Permission(权限点)对象,也没有"资源 × 操作 × 范围"三元组

💡 新建一个名叫 xxx_admin 的角色不会require_admin() 等依赖识别成"管理员"——除非角色名恰好是 admin / super_admin / owner / member 之一。自定义角色名靠业务页面自行判定。


2.2.4 设计角色的最佳实践

💡 这一节是经验,非强制规范。

1. 优先用系统角色

系统角色覆盖了 80% 场景,先看是否能用 member 解决。

2. 自定义角色按"业务岗位"建,不按"功能模块"建

❌ 不好:agent_admin(智能体管理员)— 跨业务,容易冲突 ✅ 好:kb_curator(知识库策划)— 单一职责

3. 定期清理无引用的自定义角色

新业务上来时建了一堆 xxx_v2 角色,旧业务下线后忘了删。建议每季度复查一次孤儿角色。


2.2.5 角色与用户关系

用户 ──[加入组织]── 组织

  └──[在该组织被授予]── 角色(命名字符串)

一个用户在不同组织可以有不同角色。同一组织内一个用户可以有多个角色。


2.2.6 常见问题

Q1:为什么有些操作明明授了角色还是 403?

检查清单:

  1. 角色是不是被禁用了
  2. 用户在该组织有没有这个角色(注意是组织级,不是平台级)
  3. 角色名是否被后端识别(管理类操作要求 admin / super_admin / owner 之一)
  4. 后端是否需要重启 / 缓存刷新(部分场景角色缓存 60s)

Q2:批量给一组用户改角色?

当前 UI 不支持批量。需要在「用户管理 - 管理角色」对话框里一个个改,或用后端 CLI:

bash
siracli role assign --role kb_curator --org acme --user-csv users.csv

Q3:能"克隆"一个角色吗?

UI 没有克隆按钮。新建角色 → 填写名称即可(不再需要勾选权限点)。

Q4:角色改了之后用户多久生效?

  • 用户 → 角色的关系:立即生效(下一次请求)
  • 但前端已加载的页面可能仍显示旧菜单,刷新页面即可。

Q5:能审计"谁给谁授权"了吗?

可以。所有角色变更都会写到 行为审计,resource 类型为 role,可以过滤查看。

Apache-2.0 Licensed