Fago 文档 Fago 文档
首页
快速开始
后端手册
前端手册
规划备查
文档维护
首页
快速开始
后端手册
前端手册
规划备查
文档维护
  • 快速开始

    • 简介
    • 功能列表
    • 快速启动(后端)
    • 快速启动(前端)
    • 技术选型
    • 项目结构
    • 接口与错误码
  • 后端手册

    • 配置与环境
    • 登录与会话
    • 功能权限与菜单
    • 数据权限
    • 用户、部门、岗位与角色
    • 租户与安全策略
    • 异常处理与错误码
    • 参数、分页与响应
    • 数据库迁移
    • 日志、脱敏与请求加密
    • 平台租户与套餐
    • fago-cli 常用命令
    • 发布验证与恢复演练
    • 字典与参数配置
    • 文件与对象存储
    • 站内通知与执行恢复
    • 定时任务与运行恢复
    • 可靠消息后端与积压观测
    • 身份客户端与设备会话
    • 会员认证与账号管理
    • 服务账号与 scope
    • OIDC 提供方与外部绑定
    • 原生 SSO 验收客户端
    • 账号认证模式
    • 工作流 API 与运行目录
  • 前端手册

    • 本地启动
    • 菜单与路由
    • 请求合同
    • 页面与按钮权限
    • 浏览器单点登录
    • 审批中心与表单发起
    • 工作流定义与运行管理
  • 规划备查

    • Fago:架构与实施方案
    • 总体架构
    • 身份、权限与租户设计
    • Vben 5 前端与 API 合同
    • 数据库与消息后端适配
    • 纯 Go 通用工作流:文件、文档与业务流程
    • 核心数据模型
    • 分期、工作包与验收
    • 架构决策与风险
    • 参考来源与基线
    • 网络安全等级保护二级合规要求
    • M0 实施与验收
    • M1 身份与导航实施及验收
    • 项目配置、API 内容加密与敏感数据脱敏
    • M2 系统管理实施记录
    • M3 平台与 SaaS 实施记录
    • fago-cli 功能规划
    • 生产传输层 WARN 变更范围(2026-10-23)
    • M4 发布实施与验收
    • M4 加固检查归档(本地工程环境)
    • M5 通用平台与身份实施
    • M6 R3.1 正式工作流核心与基础审批
目录

用户、部门、岗位与角色

# 用户、部门、岗位与角色

这些能力在租户端。前端路径与本地组件一一对应,例如 /system/departments/index 只注册到 /system/departments。

# 部门

部门是树。根节点的 parentId 为 null,ID 是十进制字符串。整棵树最多 10000 个有效节点、64 层。还有有效子部门或任何用户引用时不能删除,禁用用户也算引用。

创建、修改、移动和删除都携带当前 version。并发修改只有一方成功,另一方得到 HTTP 409 / 409001。结构或深度冲突是 409004。

# 岗位

岗位支持分页、按名称或编码搜索、按状态筛选,以及创建、编辑、启停和删除。编码创建后不能改。已被用户引用的岗位不能删除。软删除后同一编码可以重建。pageSize 为 1 到 100,pageNo 为 1 到 1000000。搜索里的 % 和 _ 按普通字符处理。

# 用户

可以按用户名、姓名、状态和部门筛选,并新增、编辑、启停、软删除、重置口令和维护岗位、多角色。新用户没有角色,并且必须首次改密。用户名固定为小写。删除前须明确解除仍活动的负责人/主管关系;删除会解除部门、岗位与角色关联并撤销全部会话;之后用同名重建会得到新 ID,旧凭证不会恢复。

接口不返回口令散列。重置他人密码、分配角色和保存角色授权时,要在同一次业务操作里再次提交操作者自己的口令。口令错误返回 403005,目标数据保持不变。

至少保留一个启用中的 tenant_admin 关联。停用或清空角色不能绕过这个限制。

# 角色

新角色默认没有权限,数据范围是 SELF。四个保留角色不能按普通角色编辑、删除或改授权:tenant_admin、tenant_sys_admin、tenant_security_admin、tenant_audit_admin。

拥有 system:role:read 的用户可以读角色资料。角色写入、授权和给用户分配角色仍然只允许受保护的 tenant_admin。一次替换岗位或角色关联最多 100 项,不能重复,也不能使用其他租户的 ID。

组织写入先锁租户行,再检查父链、引用和版本,然后修改数据、递增授权版本并写审计。审计失败则整笔回滚。页面截图和接口表见 M2 系统管理。

创建用户(须 system:user:create;新用户默认须首次改密):

POST /api/admin/v1/system/users
Origin: http://127.0.0.1:5174
X-App-Request: admin
Authorization: Bearer <access>
Content-Type: application/json

{
  "username": "ops01",
  "realName": "运维一号",
  "departmentId": "1",
  "password": "<操作者设置的新账号初始口令>"
}

# 显式部门负责人和直属主管

这组接口用于明确维护流程候选来源。关系独立于用户/部门版本,未维护时目标为null、版本为0。部门负责人可以是本租户其他部门的有效用户;系统不会自动选择部门首成员或租户管理员。关系变更不会重新分配已有审批任务:原来源失效后,旧候选不能再处理,管理员须按任务规则显式补分配。关系本身不授予角色或审批权限;处理任务仍须相应读取/领取/决策权限,资源正文还须经正式资源适配器授权。

前置条件是有效租户admin会话、当前套餐包含对应能力,并持有下列权限。保留的租户管理员/系统管理员按发布目录具备这些权限,普通角色须显式授予;平台账号不能使用租户端点。

关系 读取权限 维护权限 套餐能力
部门负责人 system:dept:leader:read system:dept:leader:write system.organization
直属主管 system:user:manager:read system:user:manager:write system.users

读取、设置和解除都复核该操作权限自己的数据范围。主管主体和新旧目标须在范围内;部门主体按允许部门集合判断,SELF不会变成部门管理权限。关联目标移到范围外时整体返回404001,需要更大范围的管理者处理。设置目标还要求账号enabled且未删除;已有停用目标可以解除。普通被委派管理权限不能修改保留角色账号的主管。

先读取关系的独立版本。以下为开发/测试明文逻辑合同;生产请求和响应须按接口与错误码的JWE规则封装。

GET /api/admin/v1/system/users/101/manager
Origin: http://127.0.0.1:5174
X-App-Request: admin
Authorization: Bearer <access>

尚未维护的成功响应:

{"code":0,"data":{"kind":"user-manager","subjectId":"101","targetUserId":null,"version":0},"message":"ok","requestId":"req_example"}

设置主管时使用刚读取的关系版本。version必填且非负,targetUserId必须显式提供规范正数字符串或null;漏传、数字ID或空字符串不会被解释为解除。主体ID在路径中,不能用正文覆盖租户或关系种类。

PUT /api/admin/v1/system/users/101/manager
Origin: http://127.0.0.1:5174
X-App-Request: admin
Authorization: Bearer <access>
Content-Type: application/json

{"targetUserId":"102","version":0}

成功后返回新版本:

{"code":0,"data":{"kind":"user-manager","subjectId":"101","targetUserId":"102","version":1},"message":"ok","requestId":"req_example"}

部门负责人使用同一参数合同,先读取部门关系,再按其版本设置。部门版本不能代替关系版本。

GET /api/admin/v1/system/departments/201/leader
Origin: http://127.0.0.1:5174
X-App-Request: admin
Authorization: Bearer <access>
{"code":0,"data":{"kind":"department-leader","subjectId":"201","targetUserId":null,"version":0},"message":"ok","requestId":"req_example"}
PUT /api/admin/v1/system/departments/201/leader
Origin: http://127.0.0.1:5174
X-App-Request: admin
Authorization: Bearer <access>
Content-Type: application/json

{"targetUserId":"102","version":0}
{"code":0,"data":{"kind":"department-leader","subjectId":"201","targetUserId":"102","version":1},"message":"ok","requestId":"req_example"}

解除主管时显式写null。版本行会保留并递增,旧的version=0不能再次设置;删除仍被引用的用户/部门返回409003,须先解除对应活动关系。停用账号不会自动解除关系,也不会让其获得处理权限。

PUT /api/admin/v1/system/users/101/manager
Origin: http://127.0.0.1:5174
X-App-Request: admin
Authorization: Bearer <access>
Content-Type: application/json

{"targetUserId":null,"version":1}
{"code":0,"data":{"kind":"user-manager","subjectId":"101","targetUserId":null,"version":2},"message":"ok","requestId":"req_example"}

主管关系禁止自环和多节点环,每条主管链最多64条边,租户最多10000条非空主管边。结构冲突、超限或新目标停用返回409003,不写入部分关系。版本冲突返回409001,需要重新读取后按当前状态决定是否重试:

{"code":409001,"message":"记录已变更,请重试","requestId":"req_example"}

请求格式/未知字段返回400001,语义字段无效返回400002;无权限403001,范围外或跨租户404001,会话失效401002,来源不符403004。依赖故障503001时先确认服务恢复,再重新读取版本;不盲重放旧版本写入。

关系、版本、租户授权版本和审计在同一个数据库事务提交,审计失败全部回滚。当前只提供维护API,组织页面入口仍待接入;真实工作流的发起/审批API与页面、资源读授权消费者等仍在M6实施,完整边界和验证见M6记录。

最后更新: 2026/10/29 23:05:56
数据权限
租户与安全策略

← 数据权限 租户与安全策略→

Theme by Vdoing | Copyright © 2026-2026 Fago 项目文档
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式