-- ============================================================================
-- 入口模块管理权限收口：仅系统超级管理员维护入口模块
-- 说明：
--   1. 不在代码里硬编码角色名，运行时仍然只认 RBAC 权限点。
--   2. 本脚本只调整默认 RBAC 数据，把 admin / provincial_admin 的入口模块管理能力移除。
--   3. 若后续确需给某个角色开放入口模块管理，请通过角色权限页面重新分配。
--   4. 可重复执行。
-- ============================================================================

BEGIN;

-- 保证系统超级管理员拥有入口模块路由。
INSERT INTO role_route (role_id, route_id, permission, status, created_at, updated_at)
SELECT r.id, sr.id, 'RW', 1, NOW(), NOW()
FROM roles r
JOIN sys_routes sr ON sr.route_path = '/entry-modules' AND sr.deleted_at IS NULL
WHERE r.role_key = 'super_admin'
ON CONFLICT (role_id, route_id) DO UPDATE SET
    permission = EXCLUDED.permission,
    status = EXCLUDED.status,
    updated_at = NOW();

-- 保证系统超级管理员拥有入口模块全部权限点。
INSERT INTO role_permissions (role_id, permission_id, grant_type, data_scope, created_at, updated_at)
SELECT r.id, p.id, 'GRANT', 'ALL', NOW(), NOW()
FROM roles r
JOIN permissions p ON p.permission_key LIKE 'entry_module:%'
WHERE r.role_key = 'super_admin'
ON CONFLICT (role_id, permission_id) DO UPDATE SET
    grant_type = EXCLUDED.grant_type,
    data_scope = EXCLUDED.data_scope,
    updated_at = NOW();

-- 移除地区管理员 / 旧省级管理员的入口模块权限点。
DELETE FROM role_permissions rp
USING roles r, permissions p
WHERE rp.role_id = r.id
  AND rp.permission_id = p.id
  AND r.role_key IN ('admin', 'provincial_admin')
  AND p.permission_key LIKE 'entry_module:%';

-- 移除地区管理员 / 旧省级管理员的入口模块管理菜单。
DELETE FROM role_route rr
USING roles r, sys_routes sr
WHERE rr.role_id = r.id
  AND rr.route_id = sr.id
  AND r.role_key IN ('admin', 'provincial_admin')
  AND sr.route_path = '/entry-modules';

COMMIT;

-- 验证结果：应只看到 super_admin 拥有入口模块权限。
SELECT r.role_key, p.permission_key
FROM roles r
JOIN role_permissions rp ON rp.role_id = r.id
JOIN permissions p ON p.id = rp.permission_id
WHERE p.permission_key LIKE 'entry_module:%'
ORDER BY r.role_key, p.permission_key;

-- 验证结果：admin / provincial_admin 不应再拥有 /entry-modules 路由。
SELECT r.role_key, sr.route_path, rr.permission, rr.status
FROM roles r
JOIN role_route rr ON rr.role_id = r.id
JOIN sys_routes sr ON sr.id = rr.route_id
WHERE sr.route_path = '/entry-modules'
ORDER BY r.role_key;
