43 lines
3.0 KiB
SQL
43 lines
3.0 KiB
SQL
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
||
USE hyapp_user;
|
||
|
||
-- 管理员封禁与经理中心封禁保持独立事实,解封时在 user-service 内同时检查两种来源。
|
||
CREATE TABLE IF NOT EXISTS admin_user_bans (
|
||
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
|
||
ban_id VARCHAR(96) NOT NULL COMMENT '管理员封禁事实 ID',
|
||
command_id VARCHAR(128) NOT NULL COMMENT '后台请求幂等命令 ID',
|
||
target_user_id BIGINT NOT NULL COMMENT '被封禁用户 ID',
|
||
target_old_status VARCHAR(32) NOT NULL COMMENT '创建事实前的用户状态,仅供审计',
|
||
expires_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '到期时间,UTC epoch ms;0 表示永久',
|
||
status VARCHAR(32) NOT NULL COMMENT 'active/released/expired',
|
||
reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '封禁原因',
|
||
operator_admin_id BIGINT NOT NULL COMMENT '创建封禁的后台管理员 ID',
|
||
released_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '手动解封管理员 ID;系统到期为 0',
|
||
released_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '释放原因',
|
||
released_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '释放时间,UTC epoch ms',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, ban_id),
|
||
UNIQUE KEY uk_admin_user_bans_command (app_code, command_id),
|
||
KEY idx_admin_user_bans_target (app_code, target_user_id, status, created_at_ms),
|
||
KEY idx_admin_user_bans_expire (app_code, status, expires_at_ms)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='后台管理员用户封禁事实表';
|
||
|
||
-- 解封命令必须独立保存幂等事实:后台在合并摘要只看到经理封禁时会按用户释放最新管理员封禁,
|
||
-- 若 HTTP/gRPC 超时后重试,不能继续释放下一条重叠的管理员封禁。
|
||
CREATE TABLE IF NOT EXISTS admin_user_ban_release_commands (
|
||
app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离',
|
||
command_id VARCHAR(128) NOT NULL COMMENT '稳定解封命令 ID,通常取 request_id',
|
||
target_user_id BIGINT NOT NULL COMMENT '目标用户 ID',
|
||
requested_ban_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '调用方指定 ban_id;空表示选择最新 active 管理员封禁',
|
||
resolved_ban_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '本命令实际释放的 ban_id',
|
||
release_status VARCHAR(32) NOT NULL COMMENT 'released/expired',
|
||
operator_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '手动操作管理员 ID;系统到期为 0',
|
||
reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '释放原因快照,用于校验幂等载荷',
|
||
created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms',
|
||
updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms',
|
||
PRIMARY KEY (app_code, command_id),
|
||
KEY idx_admin_ban_release_resolved (app_code, resolved_ban_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='后台管理员解封命令幂等事实表';
|