123 lines
3.8 KiB
PL/PgSQL
123 lines
3.8 KiB
PL/PgSQL
-- 平台租户内置角色 + 平台管理员账号(与 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;
|