Files
baiyue-firstleg/iam/SECURITY-EVENT-AUDIT.md
2026-08-25 16:40:48 +08:00

2.0 KiB
Raw Permalink Blame History

IAM 跨区安全事件契约

边界

IAM 使用独立的 iam_security_event_outbox。业务状态、权限版本与 Outbox 在同一数据库事务内提交;尾程按 eventId 幂等消费,并按信封 aggregateVersion 拒绝旧事件。事件不包含密码、令牌、联系方式、角色全集或权限全集。

V1 事件

三个事件均使用标准 EventEnvelope,eventVersion=1、sourceRegion=CN、targetRegion=OVERSEAS。

  1. IamUserStatusChanged
    • 聚合:aggregateType=USER、aggregateId=authUserId
    • payload:authUserId、tenantId、appCode、status、permissionVersion、changedAt
    • status:ACTIVE、DISABLED
  2. IamTenantStatusChanged
    • 聚合:aggregateType=TENANT、aggregateId=tenantId
    • payload:tenantId、status、changedAt
    • status:ACTIVE、DISABLED
    • aggregateVersion 来自 iam_security_tenant_version.status_version,每次状态变化单调递增
  3. IamPermissionVersionChanged
    • 聚合:aggregateType=AUTHORIZATION、aggregateId=authUserId
    • payload:authUserId、tenantId、appCode、permissionVersion、reason、changedAt
    • permissionVersion 来自 iam_security_subject_version.permission_version,按账号单调递增

当前接入

  • 企业成员、平台内部用户和平台用户启停均写 IamUserStatusChanged。
  • 客户创建、审核结果及启停写 IamTenantStatusChanged。
  • 成员角色、平台内部用户角色及角色权限变更写 IamPermissionVersionChanged。

普通 Admin/Client 的即时失效只覆盖用户停用、客户停用和权限版本推进。token_version 不进入 V1 投影,也不传给 Lastleg 校验;其即时权威比对只用于海外 PDA 向 Auth 核验仓绑定与会话版本。

尾程权限

lastleg-permissions.sql 初始化以下平台权限,并授予 PLATFORM_ADMIN:

  • platform:lastleg:order:list
  • platform:lastleg:order:detail
  • platform:lastleg:order:assign
  • platform:lastleg:order:transfer
  • platform:lastleg:order:merge-pallet