Files
shz-backend/sql/migration_public_job_fair_permissions.sql

96 lines
3.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 公共招聘会权限补充
--
-- 目的:
-- 1. 补充 CMS 公共招聘会详情/报名列表/企业岗位关联查询权限;
-- 2. 将查询权限授予已经拥有公共招聘会列表权限的角色(包括“企业”角色)。
--
-- 说明:
-- - 当前 CMS 详情、报名列表、企业及岗位关联接口统一使用
-- cms:publicJobFair:query。
-- - 企业端“报名并填写岗位”使用 POST /app/fair/company/signUp服务层会校验
-- 企业身份并创建岗位及招聘会-岗位关联,不需要 CMS 菜单权限。
-- - 不将 cms:publicJobFair:edit 授予企业角色。该权限同时控制修改招聘会、
-- 添加/移除企业和添加/移除岗位,属于后台管理权限。
--
-- 本脚本可重复执行:菜单和角色菜单关联均通过权限标识/关联关系幂等处理。
-- Step 1: 在“线上招聘会”菜单下补充按钮权限。
-- 使用 MAX(menu_id)+1避免依赖某个固定的菜单 ID当前生产 2056 为列表菜单。
INSERT INTO "shz"."sys_menu" (
"menu_id", "menu_name", "parent_id", "order_num", "path", "component",
"query", "route_name", "is_frame", "is_cache", "menu_type", "visible",
"status", "perms", "icon", "create_by", "create_time", "update_by",
"update_time", "remark"
)
SELECT
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "shz"."sys_menu"),
'公共招聘会查询',
parent_menu."menu_id",
1,
'',
'',
'',
'',
1,
0,
'F',
'0',
'0',
'cms:publicJobFair:query',
'#',
'admin',
CURRENT_TIMESTAMP,
'',
NULL,
'公共招聘会详情、报名及企业岗位关联查询权限'
FROM (
SELECT "menu_id"
FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:list'
AND "path" = '/jobfair/public-job-fair'
ORDER BY "menu_id"
LIMIT 1
) parent_menu
WHERE NOT EXISTS (
SELECT 1
FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:query'
);
-- Step 2: 给已经有列表权限的角色补充查询权限。
-- 这样企业角色(当前 role_id=1102以及其他已有列表权限的角色都会生效。
INSERT INTO "shz"."sys_role_menu" ("role_id", "menu_id")
SELECT DISTINCT
list_role."role_id",
query_menu."menu_id"
FROM "shz"."sys_role_menu" list_role
JOIN "shz"."sys_menu" list_menu
ON list_menu."menu_id" = list_role."menu_id"
AND list_menu."perms" = 'cms:publicJobFair:list'
CROSS JOIN (
SELECT "menu_id"
FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:query'
ORDER BY "menu_id"
LIMIT 1
) query_menu
WHERE NOT EXISTS (
SELECT 1
FROM "shz"."sys_role_menu" existing_role_menu
WHERE existing_role_menu."role_id" = list_role."role_id"
AND existing_role_menu."menu_id" = query_menu."menu_id"
);
-- 可选验证:
-- SELECT menu_id, menu_name, perms
-- FROM shz.sys_menu
-- WHERE perms LIKE 'cms:publicJobFair:%'
-- ORDER BY menu_id;
--
-- SELECT r.role_id, r.role_name, m.menu_name, m.perms
-- FROM shz.sys_role_menu rm
-- JOIN shz.sys_role r ON r.role_id = rm.role_id
-- JOIN shz.sys_menu m ON m.menu_id = rm.menu_id
-- WHERE m.perms = 'cms:publicJobFair:query'
-- ORDER BY r.role_id;