# 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`