M2 用户、角色与权限 — 状态流转 + 业务流程图(ASCII) 配套:M2-用户角色与权限-FSD.md ═══════════════════════════════════════════════════════════════════════ 一、权限判定流程(登录 → SSO 合并 → 角色解析 → RBAC ∩ ABAC → 放行/拒绝) ═══════════════════════════════════════════════════════════════════════ ┌──────────┐ 选 Google / 飞书 │ 访问 CSP │───────────────────►┌──────────────┐ └──────────┘ │ 1.IdP 校验 │ │ 取回 email │ └──────┬───────┘ ▼ ┌──────────────────────────────┐ │ 2.按 email 查 User │ │ 命中→合并登录 │ │ 未命中→供给(§4.6)/邀请(§4.7)│ │ 停用→拒绝(记审计) │ └──────────────┬───────────────┘ ▼ ┌──────────────────────────────┐ │ 3.解析用户全部角色(多角色) │ └──────────────┬───────────────┘ ▼ ┌───────────────────────────────────────────────────────────┐ │ 4.RBAC 功能校验 ∩ 5.ABAC 数据范围过滤 │ │ 各角色 function_perms 并集 各角色范围并集(D-并集) │ │ 动作∈并集? ──否──► 拒绝 取 scope_attributes: │ │ +审计 region/own_customers[]/ │ │ joined_projects[] │ │ → 生成可见集、行级过滤 │ └───────────────────────────────────┬───────────────────────┘ 动作允许 且 对象∈可见集 ▼ ┌──────────────┐ │ 6.放行 + 返回 │ └──────────────┘ 越权(动作不允许 或 对象越界):拦截 + 100% 记审计(FR-IAM-05/NFR-04) 说明:RBAC 与 ABAC 解耦、可各自独立配置与验证;变更即时生效、不依赖重登。 ═══════════════════════════════════════════════════════════════════════ 二、User 供给状态流转(HR/IdP · SCIM) ═══════════════════════════════════════════════════════════════════════ ┌──────────┐ 入职事件 ┌──────────┐ 转岗事件(调整角色/范围) ┌──────────┐ │ 00 未开通│─────────►│ 10 在职 │◄──────────────────────►│ 10 在职 │ └──────────┘ 建 User │ 启用 │ │ (新角色) │ 赋初始角色└────┬─────┘ └──────────┘ │ 离职事件 ▼ ┌──────────────┐ 停用 + 回收全部角色/权限 │ 90 停用 │ + 记审计(登录一律拒绝) └──────────────┘ 图例:──► 正向流转 异常:SCIM 失败→重试+告警,保留上次状态(NFR-06) ═══════════════════════════════════════════════════════════════════════ 三、泳道流程图 · 外部账号邀请开通(FR-IAM-08) ═══════════════════════════════════════════════════════════════════════ 发起(TAM/PM) │ 系统/CSP │ 外部用户(Customer_External) ─────────────────────────────────────────────────────────────────────── │ 1.选客户/项目 │ │ │ 填外部 email │ │ │ 定 scope │ │ ├─────────────────►│ 2.校验发起人∈{TAM,PM} │ │ │ 否→阻断+审计 │ │ │ 3.校验 scope⊆发起人范围 │ │ │ 4.生成邀请(飞书通知 INT-05)├───────────────────────►│ 5.收邀请 │ │ │◄──────────────────────┤ SSO 首登 │ │ 6.建 Customer_External │ │ (按 email) │ │ 绑定其相关项目/交付物 │ │ │ │ 7.授受限只读 + 签署 ├───────────────────────►│ 8.仅见自己项目 │ │ │ │ 只读 + 签署(M8) ─────────────────────────────────────────────────────────────────────── 异常:非 TAM/PM 发起→阻断率=100%;外部越权写→拒绝(写操作数=0);越界访问→拦截(越界=0) ═══════════════════════════════════════════════════════════════════════ 四、泳道流程图 · 用户入离职供给(FR-IAM-06 · INT-13 SCIM) ═══════════════════════════════════════════════════════════════════════ HR/IdP │ 系统/CSP │ Admin ─────────────────────────────────────────────────────────────────────── │ 1.入职事件 │ │ ├───────────────►│ 2.按 email 建/合并 User │ │ │ 赋初始角色 → 启用 │ │ │ 3.写审计 │ │ 4.转岗事件 │ │ ├───────────────►│ 5.调整角色/scope → 即时重算权限 │ │ 6.离职事件 │ │ ├───────────────►│ 7.停用账号 + 回收全部角色/权限 │ │ │ 即时生效 + 写审计 │ │ ├─────────────────────────────────►│ 8.查看供给记录 │ │ (SCIM 失败→重试+告警) │ 处理异常项 ─────────────────────────────────────────────────────────────────────── 说明:供给 email = SSO 合并键(§4.1),同一人身份一致,不重复建号