4. 用户管理服务边界:用户生命周期管理、用户属性管理、用户组管理的职责划分

在IAM平台中,用户管理是认证与授权的基础数据源。如果用户管理内部职责不清,会导致数据冗余、权限扩散、生命周期失控。本章将用户管理拆分为三个独立的子服务:用户生命周期管理、用户属性管理、用户组管理,并明确各自的边界与协作关系。

4.1 三大子服务的核心职责

子服务 核心职责 关键操作 数据主权
用户生命周期管理 负责用户账号从创建到注销的全流程状态机 注册、激活、锁定、解锁、归档、删除 用户状态、账号有效期、注册来源
用户属性管理 负责用户身份属性的增删改查与结构定义 属性定义、属性赋值、属性校验、属性同步 用户属性Schema、属性值、元数据
用户组管理 负责用户分组的创建、成员维护与组层级 组创建、成员加入/退出、组嵌套、组属性 组结构、组成员关系、组属性
设计原则:每个子服务拥有独立的数据存储与API端点,通过事件总线(Event Bus)进行状态变更通知,避免服务间直接数据库耦合。

4.2 用户生命周期管理:状态机驱动

用户生命周期管理是用户管理的主控制器。它维护一个严格的状态机,确保用户账号在不同阶段的行为可追溯、可管控。

  • 状态定义:注册中 → 已激活 → 正常使用 → 锁定(临时/永久) → 归档 → 已删除
  • 状态转换规则:只有生命周期服务有权修改用户状态,其他服务只能读取状态。
  • 事件发布:每次状态变更(如用户锁定)必须发布事件,供属性管理、组管理、授权服务订阅处理。
常见陷阱:不要将“用户状态”作为属性存储在属性管理服务中。状态是生命周期服务的核心数据,属性服务只应存储描述性信息(如姓名、邮箱、部门)。

4.3 用户属性管理:灵活扩展

用户属性管理负责管理用户的描述性数据。它需要支持动态Schema,以适应不同业务场景的属性需求。

  • 基础属性:用户名、邮箱、手机号、显示名称(由系统预定义,不可删除)
  • 扩展属性:部门、职位、工号、入职日期、成本中心(支持自定义添加)
  • 属性校验规则:必填、唯一、正则表达式、枚举值、关联校验
  • 属性来源标记:手动录入、HR同步、LDAP导入、SSO断言
关键设计:属性管理服务不关心用户是否“活着”,它只负责存储和校验属性值。当生命周期服务删除用户时,属性服务通过订阅事件来清理关联属性数据。

4.4 用户组管理:权限聚合单元

用户组管理是授权模块的前置聚合层。它将用户按业务维度分组,为后续的RBAC/ABAC授权提供主体集合。

  • 组类型:静态组(管理员手动添加)、动态组(基于属性规则自动计算成员)
  • 组层级:支持父子组嵌套,子组自动继承父组权限
  • 组成员同步:当用户属性变更时(如部门从A变为B),动态组自动重新计算成员资格

4.5 服务边界协作流程(SVG)

下图展示了用户管理内部三个子服务之间的协作关系,以及它们与外部认证、授权服务的交互边界:

用户管理服务边界协作图 用户管理服务边界协作图 认证服务 验证用户凭证 授权服务 权限判定 用户生命周期管理 状态机 · 注册/锁定/删除 发布状态变更事件 用户属性管理 动态Schema · 属性校验 订阅事件清理属性 用户组管理 静态组/动态组 组层级 · 成员计算 事件总线(Event Bus) 用户状态变更事件 · 属性变更事件 · 组成员变更事件 订阅 订阅 属性变更通知 协作规则: 1. 认证/授权服务只与生命周期服务交互,不直接操作属性或组数据。 2. 属性管理和组管理通过事件总线订阅生命周期事件,实现最终一致性。

4.6 职责划分的典型场景

以下通过一个“员工入职-转岗-离职”的完整流程,说明三个子服务如何各司其职:

阶段 生命周期管理 属性管理 组管理
入职 创建账号,状态=注册中;HR确认后状态=已激活 写入姓名、邮箱、部门、工号等属性 根据部门属性自动加入“研发部”动态组
转岗 状态不变(仍为正常) 更新部门属性从“研发”改为“市场” 动态组自动重新计算:退出研发组,加入市场组
离职 状态=归档;30天后自动变为已删除 订阅归档事件,保留属性快照用于审计 订阅删除事件,移除所有组成员关系

4.7 服务边界拆分收益

  • 独立扩展:属性管理需要频繁扩展Schema,生命周期管理需要高可用状态机,拆分后可以独立部署和扩缩容。
  • 故障隔离:属性管理服务宕机不影响用户登录(生命周期服务仍可验证用户状态),仅影响属性查询和修改。
  • 职责单一:每个服务只关注自己的数据主权,避免“上帝服务”导致代码臃肿、权限混乱。
总结:用户管理拆分为生命周期、属性、组管理三个子服务,是IAM平台实现高内聚低耦合的关键一步。生命周期管“生死”,属性管“描述”,组管“聚合”,三者通过事件总线协作,为上层认证与授权提供清晰、可靠的用户数据基础。