298 lines
8.2 KiB
MySQL
298 lines
8.2 KiB
MySQL
|
|
set search_path to public;
|
||
|
|
|
||
|
|
do $$
|
||
|
|
declare
|
||
|
|
v_system_id bigint;
|
||
|
|
v_frontend_home_id bigint;
|
||
|
|
v_todo_perm_id bigint;
|
||
|
|
v_activity_perm_id bigint;
|
||
|
|
v_has_role_permission_tenant boolean;
|
||
|
|
begin
|
||
|
|
-- 1. 检查 sys_role_permission 是否带 tenant_id
|
||
|
|
select exists (
|
||
|
|
select 1
|
||
|
|
from information_schema.columns
|
||
|
|
where table_schema = current_schema()
|
||
|
|
and table_name = 'sys_role_permission'
|
||
|
|
and column_name = 'tenant_id'
|
||
|
|
) into v_has_role_permission_tenant;
|
||
|
|
|
||
|
|
-- 2. 定位系统管理
|
||
|
|
select perm_id
|
||
|
|
into v_system_id
|
||
|
|
from sys_permission
|
||
|
|
where code = 'system'
|
||
|
|
and coalesce(is_deleted, 0) = 0
|
||
|
|
order by perm_id
|
||
|
|
limit 1;
|
||
|
|
|
||
|
|
if v_system_id is null then
|
||
|
|
raise exception '未找到 system 权限,请先确认系统管理目录存在';
|
||
|
|
end if;
|
||
|
|
|
||
|
|
-- 3. 创建或修复“前台首页”分组
|
||
|
|
select perm_id
|
||
|
|
into v_frontend_home_id
|
||
|
|
from sys_permission
|
||
|
|
where code = 'menu:frontend-home'
|
||
|
|
order by coalesce(is_deleted, 0) asc, perm_id asc
|
||
|
|
limit 1;
|
||
|
|
|
||
|
|
if v_frontend_home_id is null then
|
||
|
|
insert into sys_permission (
|
||
|
|
parent_id, name, code, perm_type, level, path, component, icon,
|
||
|
|
sort_order, is_visible, status, description, meta, is_deleted, created_at, updated_at
|
||
|
|
) values (
|
||
|
|
v_system_id,
|
||
|
|
'前台首页',
|
||
|
|
'menu:frontend-home',
|
||
|
|
'menu',
|
||
|
|
2,
|
||
|
|
null,
|
||
|
|
null,
|
||
|
|
'HomeOutlined',
|
||
|
|
7,
|
||
|
|
0,
|
||
|
|
1,
|
||
|
|
'前台首页相关权限分组',
|
||
|
|
'{}'::jsonb,
|
||
|
|
0,
|
||
|
|
now(),
|
||
|
|
now()
|
||
|
|
)
|
||
|
|
returning perm_id into v_frontend_home_id;
|
||
|
|
else
|
||
|
|
update sys_permission
|
||
|
|
set parent_id = v_system_id,
|
||
|
|
name = '前台首页',
|
||
|
|
code = 'menu:frontend-home',
|
||
|
|
perm_type = 'menu',
|
||
|
|
level = 2,
|
||
|
|
path = null,
|
||
|
|
component = null,
|
||
|
|
icon = 'HomeOutlined',
|
||
|
|
sort_order = 7,
|
||
|
|
is_visible = 0,
|
||
|
|
status = 1,
|
||
|
|
description = '前台首页相关权限分组',
|
||
|
|
meta = '{}'::jsonb,
|
||
|
|
is_deleted = 0,
|
||
|
|
updated_at = now()
|
||
|
|
where perm_id = v_frontend_home_id;
|
||
|
|
end if;
|
||
|
|
|
||
|
|
-- 4. 创建或修复“查看首页待办卡片”
|
||
|
|
select perm_id
|
||
|
|
into v_todo_perm_id
|
||
|
|
from sys_permission
|
||
|
|
where code = 'dashboard_todo_card:view'
|
||
|
|
order by coalesce(is_deleted, 0) asc, perm_id asc
|
||
|
|
limit 1;
|
||
|
|
|
||
|
|
if v_todo_perm_id is null then
|
||
|
|
insert into sys_permission (
|
||
|
|
parent_id, name, code, perm_type, level, path, component, icon,
|
||
|
|
sort_order, is_visible, status, description, meta, is_deleted, created_at, updated_at
|
||
|
|
) values (
|
||
|
|
v_frontend_home_id,
|
||
|
|
'查看首页待办卡片',
|
||
|
|
'dashboard_todo_card:view',
|
||
|
|
'button',
|
||
|
|
3,
|
||
|
|
null,
|
||
|
|
null,
|
||
|
|
null,
|
||
|
|
20,
|
||
|
|
1,
|
||
|
|
1,
|
||
|
|
'控制首页待办事项卡片是否可见',
|
||
|
|
'{}'::jsonb,
|
||
|
|
0,
|
||
|
|
now(),
|
||
|
|
now()
|
||
|
|
)
|
||
|
|
returning perm_id into v_todo_perm_id;
|
||
|
|
else
|
||
|
|
update sys_permission
|
||
|
|
set parent_id = v_frontend_home_id,
|
||
|
|
name = '查看首页待办卡片',
|
||
|
|
code = 'dashboard_todo_card:view',
|
||
|
|
perm_type = 'button',
|
||
|
|
level = 3,
|
||
|
|
path = null,
|
||
|
|
component = null,
|
||
|
|
icon = null,
|
||
|
|
sort_order = 20,
|
||
|
|
is_visible = 1,
|
||
|
|
status = 1,
|
||
|
|
description = '控制首页待办事项卡片是否可见',
|
||
|
|
meta = '{}'::jsonb,
|
||
|
|
is_deleted = 0,
|
||
|
|
updated_at = now()
|
||
|
|
where perm_id = v_todo_perm_id;
|
||
|
|
end if;
|
||
|
|
|
||
|
|
-- 5. 创建或修复“查看首页最新动态卡片”
|
||
|
|
select perm_id
|
||
|
|
into v_activity_perm_id
|
||
|
|
from sys_permission
|
||
|
|
where code = 'dashboard_activity_card:view'
|
||
|
|
order by coalesce(is_deleted, 0) asc, perm_id asc
|
||
|
|
limit 1;
|
||
|
|
|
||
|
|
if v_activity_perm_id is null then
|
||
|
|
insert into sys_permission (
|
||
|
|
parent_id, name, code, perm_type, level, path, component, icon,
|
||
|
|
sort_order, is_visible, status, description, meta, is_deleted, created_at, updated_at
|
||
|
|
) values (
|
||
|
|
v_frontend_home_id,
|
||
|
|
'查看首页最新动态卡片',
|
||
|
|
'dashboard_activity_card:view',
|
||
|
|
'button',
|
||
|
|
3,
|
||
|
|
null,
|
||
|
|
null,
|
||
|
|
null,
|
||
|
|
21,
|
||
|
|
1,
|
||
|
|
1,
|
||
|
|
'控制首页最新动态卡片是否可见',
|
||
|
|
'{}'::jsonb,
|
||
|
|
0,
|
||
|
|
now(),
|
||
|
|
now()
|
||
|
|
)
|
||
|
|
returning perm_id into v_activity_perm_id;
|
||
|
|
else
|
||
|
|
update sys_permission
|
||
|
|
set parent_id = v_frontend_home_id,
|
||
|
|
name = '查看首页最新动态卡片',
|
||
|
|
code = 'dashboard_activity_card:view',
|
||
|
|
perm_type = 'button',
|
||
|
|
level = 3,
|
||
|
|
path = null,
|
||
|
|
component = null,
|
||
|
|
icon = null,
|
||
|
|
sort_order = 21,
|
||
|
|
is_visible = 1,
|
||
|
|
status = 1,
|
||
|
|
description = '控制首页最新动态卡片是否可见',
|
||
|
|
meta = '{}'::jsonb,
|
||
|
|
is_deleted = 0,
|
||
|
|
updated_at = now()
|
||
|
|
where perm_id = v_activity_perm_id;
|
||
|
|
end if;
|
||
|
|
|
||
|
|
-- 6. 软删重复的前台首页分组
|
||
|
|
update sys_permission
|
||
|
|
set is_deleted = 1,
|
||
|
|
updated_at = now()
|
||
|
|
where code = 'menu:frontend-home'
|
||
|
|
and perm_id <> v_frontend_home_id;
|
||
|
|
|
||
|
|
-- 7. 软删重复的待办权限
|
||
|
|
update sys_permission
|
||
|
|
set is_deleted = 1,
|
||
|
|
updated_at = now()
|
||
|
|
where code = 'dashboard_todo_card:view'
|
||
|
|
and perm_id <> v_todo_perm_id;
|
||
|
|
|
||
|
|
-- 8. 软删重复的动态权限
|
||
|
|
update sys_permission
|
||
|
|
set is_deleted = 1,
|
||
|
|
updated_at = now()
|
||
|
|
where code = 'dashboard_activity_card:view'
|
||
|
|
and perm_id <> v_activity_perm_id;
|
||
|
|
|
||
|
|
-- 9. 给管理员类角色补齐 system / 前台首页 / 待办卡片 / 最新动态卡片 权限
|
||
|
|
if v_has_role_permission_tenant then
|
||
|
|
insert into sys_role_permission (role_id, perm_id, tenant_id, is_deleted, created_at, updated_at)
|
||
|
|
select
|
||
|
|
r.role_id,
|
||
|
|
p.perm_id,
|
||
|
|
r.tenant_id,
|
||
|
|
0,
|
||
|
|
now(),
|
||
|
|
now()
|
||
|
|
from sys_role r
|
||
|
|
join sys_permission p
|
||
|
|
on p.code in ('system', 'menu:frontend-home', 'dashboard_todo_card:view', 'dashboard_activity_card:view')
|
||
|
|
and coalesce(p.is_deleted, 0) = 0
|
||
|
|
where coalesce(r.is_deleted, 0) = 0
|
||
|
|
and (
|
||
|
|
r.role_code in ('TENANT_ADMIN', 'ADMIN', 'SYS_ADMIN', 'PLATFORM_ADMIN', 'SUPER_ADMIN')
|
||
|
|
or r.role_name ilike '%管理员%'
|
||
|
|
or r.role_name ilike '%admin%'
|
||
|
|
)
|
||
|
|
and not exists (
|
||
|
|
select 1
|
||
|
|
from sys_role_permission rp
|
||
|
|
where rp.role_id = r.role_id
|
||
|
|
and rp.perm_id = p.perm_id
|
||
|
|
);
|
||
|
|
|
||
|
|
update sys_role_permission rp
|
||
|
|
set tenant_id = coalesce(rp.tenant_id, r.tenant_id),
|
||
|
|
is_deleted = 0,
|
||
|
|
updated_at = now()
|
||
|
|
from sys_role r,
|
||
|
|
sys_permission p
|
||
|
|
where rp.role_id = r.role_id
|
||
|
|
and p.perm_id = rp.perm_id
|
||
|
|
and coalesce(r.is_deleted, 0) = 0
|
||
|
|
and p.code in ('system', 'menu:frontend-home', 'dashboard_todo_card:view', 'dashboard_activity_card:view')
|
||
|
|
and (
|
||
|
|
r.role_code in ('TENANT_ADMIN', 'ADMIN', 'SYS_ADMIN', 'PLATFORM_ADMIN', 'SUPER_ADMIN')
|
||
|
|
or r.role_name ilike '%管理员%'
|
||
|
|
or r.role_name ilike '%admin%'
|
||
|
|
);
|
||
|
|
else
|
||
|
|
insert into sys_role_permission (role_id, perm_id, is_deleted, created_at, updated_at)
|
||
|
|
select
|
||
|
|
r.role_id,
|
||
|
|
p.perm_id,
|
||
|
|
0,
|
||
|
|
now(),
|
||
|
|
now()
|
||
|
|
from sys_role r
|
||
|
|
join sys_permission p
|
||
|
|
on p.code in ('system', 'menu:frontend-home', 'dashboard_todo_card:view', 'dashboard_activity_card:view')
|
||
|
|
and coalesce(p.is_deleted, 0) = 0
|
||
|
|
where coalesce(r.is_deleted, 0) = 0
|
||
|
|
and (
|
||
|
|
r.role_code in ('TENANT_ADMIN', 'ADMIN', 'SYS_ADMIN', 'PLATFORM_ADMIN', 'SUPER_ADMIN')
|
||
|
|
or r.role_name ilike '%管理员%'
|
||
|
|
or r.role_name ilike '%admin%'
|
||
|
|
)
|
||
|
|
and not exists (
|
||
|
|
select 1
|
||
|
|
from sys_role_permission rp
|
||
|
|
where rp.role_id = r.role_id
|
||
|
|
and rp.perm_id = p.perm_id
|
||
|
|
);
|
||
|
|
|
||
|
|
update sys_role_permission rp
|
||
|
|
set is_deleted = 0,
|
||
|
|
updated_at = now()
|
||
|
|
where exists (
|
||
|
|
select 1
|
||
|
|
from sys_role r
|
||
|
|
where r.role_id = rp.role_id
|
||
|
|
and coalesce(r.is_deleted, 0) = 0
|
||
|
|
and (
|
||
|
|
r.role_code in ('TENANT_ADMIN', 'ADMIN', 'SYS_ADMIN', 'PLATFORM_ADMIN', 'SUPER_ADMIN')
|
||
|
|
or r.role_name ilike '%管理员%'
|
||
|
|
or r.role_name ilike '%admin%'
|
||
|
|
)
|
||
|
|
)
|
||
|
|
and exists (
|
||
|
|
select 1
|
||
|
|
from sys_permission p
|
||
|
|
where p.perm_id = rp.perm_id
|
||
|
|
and p.code in ('system', 'menu:frontend-home', 'dashboard_todo_card:view', 'dashboard_activity_card:view')
|
||
|
|
and coalesce(p.is_deleted, 0) = 0
|
||
|
|
);
|
||
|
|
end if;
|
||
|
|
end
|
||
|
|
$$;
|