-- 平台租户内置角色 + 平台管理员账号(与 internal/iam/service 中租户初始化逻辑对齐) -- 依赖:已执行 001_iam.sql、002_system.sql、003_seed_platform_tenant.sql -- -- 默认管理员(平台租户 platform): -- 用户名:admin -- 密码:Admin@123 (bcrypt DefaultCost,与 golang.org/x/crypto/bcrypt 一致) -- -- 内置角色: -- tenant_admin — 与 DefaultTenantAdminRoleCode 一致,data_scope=4(全部) -- user — 普通用户占位,data_scope=1(本人) BEGIN; -- 固定 UUID,便于排查与文档引用 -- platform_tenant_id = 00000000-0000-0000-0000-000000000001 -- root_dept_id = 20000000-0000-4000-8000-000000000001 -- role_admin_id = 20000000-0000-4000-8000-000000000002 -- role_user_id = 20000000-0000-4000-8000-000000000006 -- admin_user_id = 20000000-0000-4000-8000-000000000003 -- 1) 平台根部门(与 TenantService.Create 中根部门一致) INSERT INTO iam_dept ( id, tenant_id, parent_id, dept_name, dept_path, sort_order, status, created_at, updated_at ) VALUES ( '20000000-0000-4000-8000-000000000001', '00000000-0000-0000-0000-000000000001', '', '平台', '/20000000-0000-4000-8000-000000000001/', 0, 1, now(), now() ) ON CONFLICT (id) DO NOTHING; -- 2) 内置角色:租户超级管理员(与新租户初始化角色编码一致) INSERT INTO iam_role ( id, tenant_id, role_code, role_name, data_scope, description, is_builtin, status, created_at, updated_at ) VALUES ( '20000000-0000-4000-8000-000000000002', '00000000-0000-0000-0000-000000000001', 'tenant_admin', '超级管理员', 4, '内置:租户内全部数据权限(与 DefaultTenantAdminRoleCode 一致)', true, 1, now(), now() ) ON CONFLICT (id) DO NOTHING; -- 3) 内置角色:普通用户(占位) INSERT INTO iam_role ( id, tenant_id, role_code, role_name, data_scope, description, is_builtin, status, created_at, updated_at ) VALUES ( '20000000-0000-4000-8000-000000000006', '00000000-0000-0000-0000-000000000001', 'user', '普通用户', 1, '内置:本人数据范围(DataScopeSelf)', true, 1, now(), now() ) ON CONFLICT (id) DO NOTHING; -- 4) 平台管理员用户(密码 Admin@123) INSERT INTO iam_user ( id, tenant_id, dept_id, user_name, real_name, password_hash, status, created_at, updated_at ) VALUES ( '20000000-0000-4000-8000-000000000003', '00000000-0000-0000-0000-000000000001', '20000000-0000-4000-8000-000000000001', 'admin', '平台管理员', '$2a$10$8p7lXpy9mr7hhnAiOA8pNOgAU128xIWFxrU90iqw.F4VSw77vDEYO', 1, now(), now() ) ON CONFLICT (id) DO NOTHING; -- 5) 用户-部门(主部门) INSERT INTO iam_user_dept (id, user_id, dept_id, is_primary, created_at) VALUES ( '20000000-0000-4000-8000-000000000004', '20000000-0000-4000-8000-000000000003', '20000000-0000-4000-8000-000000000001', true, now() ) ON CONFLICT (id) DO NOTHING; -- 6) 用户-角色(绑定 tenant_admin) INSERT INTO iam_user_role (id, user_id, role_id, created_at) VALUES ( '20000000-0000-4000-8000-000000000005', '20000000-0000-4000-8000-000000000003', '20000000-0000-4000-8000-000000000002', now() ) ON CONFLICT (id) DO NOTHING; -- 7) 回写租户管理员 UPDATE iam_tenant SET admin_user_id = '20000000-0000-4000-8000-000000000003' WHERE id = '00000000-0000-0000-0000-000000000001'; -- 8) 将「超级管理员」与当前库中全部菜单关联(与 TenantService.Create 一致;无 iam_menu 数据时本步不插入行) INSERT INTO iam_role_menu (id, role_id, menu_id, created_at) SELECT gen_random_uuid()::text, '20000000-0000-4000-8000-000000000002', m.id, now() FROM iam_menu m ON CONFLICT (role_id, menu_id) DO NOTHING; COMMIT;