Files
leaudit-platform-backend/scripts/创建sql/seed_rule_groups_rbac.sql
T

164 lines
5.1 KiB
PL/PgSQL

BEGIN;
WITH settings_route AS (
SELECT id FROM sys_routes WHERE route_path = '/settings' AND deleted_at IS NULL LIMIT 1
), upsert_route AS (
INSERT INTO sys_routes (
route_path,
route_name,
component,
parent_id,
route_title,
icon,
sort_order,
is_hidden,
is_cache,
meta,
status,
created_at,
updated_at,
deleted_at
)
SELECT
'/rule-groups',
'rule-groups',
'rule-groups',
settings_route.id,
'评查点分组',
'ri-folder-open-line',
4,
FALSE,
TRUE,
'{"group": "settings"}'::jsonb,
0,
NOW(),
NOW(),
NULL
FROM settings_route
ON CONFLICT (route_path) WHERE deleted_at IS NULL
DO UPDATE SET
route_name = EXCLUDED.route_name,
component = EXCLUDED.component,
parent_id = EXCLUDED.parent_id,
route_title = EXCLUDED.route_title,
icon = EXCLUDED.icon,
sort_order = EXCLUDED.sort_order,
is_hidden = EXCLUDED.is_hidden,
is_cache = EXCLUDED.is_cache,
meta = EXCLUDED.meta,
status = 0,
updated_at = NOW(),
deleted_at = NULL
RETURNING id
), target_route AS (
SELECT id FROM upsert_route
UNION ALL
SELECT id FROM sys_routes WHERE route_path = '/rule-groups' AND deleted_at IS NULL LIMIT 1
)
INSERT INTO permissions (
permission_key,
module,
resource,
action,
description,
display_name,
permission_type,
is_system,
metadata,
created_at,
updated_at,
sort_order,
route_id,
api_path,
api_method
)
SELECT *
FROM (
SELECT 'evaluation_group:list:read', 'evaluation_group', 'list', 'read', '查看评查点分组列表', '查看评查点分组列表', 'API', FALSE, '{}'::jsonb, NOW(), NOW(), 1, (SELECT id FROM target_route LIMIT 1), '/api/v3/evaluation-point-groups', 'GET'
UNION ALL
SELECT 'evaluation_group:detail:read', 'evaluation_group', 'detail', 'read', '查看评查点分组详情', '查看评查点分组详情', 'API', FALSE, '{}'::jsonb, NOW(), NOW(), 2, (SELECT id FROM target_route LIMIT 1), '/api/v3/evaluation-point-groups/{id}', 'GET'
UNION ALL
SELECT 'evaluation_group:create:write','evaluation_group', 'create', 'write', '创建评查点分组', '创建评查点分组', 'API', FALSE, '{}'::jsonb, NOW(), NOW(), 3, (SELECT id FROM target_route LIMIT 1), '/api/v3/evaluation-point-groups', 'POST'
UNION ALL
SELECT 'evaluation_group:update:write','evaluation_group', 'update', 'write', '更新评查点分组', '更新评查点分组', 'API', FALSE, '{}'::jsonb, NOW(), NOW(), 4, (SELECT id FROM target_route LIMIT 1), '/api/v3/evaluation-point-groups/{id}', 'PUT'
UNION ALL
SELECT 'evaluation_group:delete:delete','evaluation_group','delete', 'delete', '删除评查点分组', '删除评查点分组', 'API', FALSE, '{}'::jsonb, NOW(), NOW(), 5, (SELECT id FROM target_route LIMIT 1), '/api/v3/evaluation-point-groups/{id}', 'DELETE'
UNION ALL
SELECT 'evaluation_group:batch:write', 'evaluation_group', 'batch', 'write', '批量操作评查点分组', '批量操作评查点分组', 'API', FALSE, '{}'::jsonb, NOW(), NOW(), 6, (SELECT id FROM target_route LIMIT 1), '/api/v3/evaluation-point-groups/batch/status', 'PATCH'
) AS seed
ON CONFLICT (permission_key)
DO UPDATE SET
module = EXCLUDED.module,
resource = EXCLUDED.resource,
action = EXCLUDED.action,
description = EXCLUDED.description,
display_name = EXCLUDED.display_name,
permission_type = EXCLUDED.permission_type,
metadata = EXCLUDED.metadata,
updated_at = NOW(),
sort_order = EXCLUDED.sort_order,
route_id = EXCLUDED.route_id,
api_path = EXCLUDED.api_path,
api_method = EXCLUDED.api_method;
WITH permission_ids AS (
SELECT id, permission_key
FROM permissions
WHERE permission_key IN (
'evaluation_group:list:read',
'evaluation_group:detail:read',
'evaluation_group:create:write',
'evaluation_group:update:write',
'evaluation_group:delete:delete',
'evaluation_group:batch:write'
)
), admin_roles AS (
SELECT id
FROM roles
WHERE role_key IN ('super_admin', 'provincial_admin', 'admin')
), route_id AS (
SELECT id FROM sys_routes WHERE route_path = '/rule-groups' AND deleted_at IS NULL LIMIT 1
)
INSERT INTO role_permissions (
role_id,
permission_id,
grant_type,
data_scope,
created_at,
updated_at
)
SELECT admin_roles.id, permission_ids.id, 'GRANT', 'ALL', NOW(), NOW()
FROM admin_roles
CROSS JOIN permission_ids
ON CONFLICT (role_id, permission_id)
DO UPDATE SET
grant_type = EXCLUDED.grant_type,
data_scope = EXCLUDED.data_scope,
updated_at = NOW();
WITH admin_roles AS (
SELECT id
FROM roles
WHERE role_key IN ('super_admin', 'provincial_admin', 'admin')
), route_id AS (
SELECT id FROM sys_routes WHERE route_path = '/rule-groups' AND deleted_at IS NULL LIMIT 1
)
INSERT INTO role_route (
role_id,
route_id,
permission,
created_at,
updated_at,
status
)
SELECT admin_roles.id, route_id.id, 'RW', NOW(), NOW(), 1
FROM admin_roles
CROSS JOIN route_id
ON CONFLICT (role_id, route_id)
DO UPDATE SET
permission = EXCLUDED.permission,
updated_at = NOW(),
status = 1;
COMMIT;