Files
mp-java/src/main/resources/sql/house_knowledge_menu_permission.sql
T

147 lines
5.6 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.
-- 房源知识库后台菜单与权限。
-- 执行前请确认目标租户;当前开发环境为 10550,部署到其他租户时须改为对应租户 ID。
-- 脚本按“房源管理”父菜单动态挂载;若最后的校验结果显示 parent_menu_id 为 NULL,
-- 请先检查该租户的 sys_menu 数据后再执行。
SET @house_knowledge_tenant_id := 10550;
SET @house_knowledge_advisor_role_code := NULL;
-- 示例:SET @house_knowledge_advisor_role_code := 'consultant';
START TRANSACTION;
SET @house_knowledge_parent_menu_id := (
SELECT menu_id
FROM sys_menu
WHERE tenant_id = @house_knowledge_tenant_id
AND deleted = 0
AND menu_type = 0
AND (title = '房源管理' OR path IN ('/house', 'house'))
ORDER BY CASE WHEN title = '房源管理' THEN 0 ELSE 1 END, menu_id
LIMIT 1
);
INSERT INTO sys_menu (
parent_id, title, path, component, menu_type, sort_number,
authority, icon, hide, meta, app_id, tenant_id, deleted
)
SELECT
parent.menu_id, '房源知识库', '/house/knowledge', 'house/knowledge/index', 0, 90,
'house:knowledge', '', 0, '{}', parent.app_id, @house_knowledge_tenant_id, 0
FROM sys_menu parent
WHERE parent.menu_id = @house_knowledge_parent_menu_id
AND NOT EXISTS (
SELECT 1
FROM sys_menu existing
WHERE existing.tenant_id = @house_knowledge_tenant_id
AND existing.deleted = 0
AND existing.path = '/house/knowledge'
);
SET @house_knowledge_menu_id := (
SELECT menu_id
FROM sys_menu
WHERE tenant_id = @house_knowledge_tenant_id
AND deleted = 0
AND path = '/house/knowledge'
ORDER BY menu_id
LIMIT 1
);
-- 地点档案和标签字典由租户管理员维护;知识条目可单独授予顾问维护。
INSERT INTO sys_menu (
parent_id, title, path, component, menu_type, sort_number,
authority, icon, hide, meta, app_id, tenant_id, deleted
)
SELECT
@house_knowledge_menu_id, permission.title, '', '', 1, permission.sort_number,
permission.authority, '', 0, '{}', menu.app_id, @house_knowledge_tenant_id, 0
FROM sys_menu menu
JOIN (
SELECT '查看地点档案' AS title, 'house:knowledge:location:list' AS authority, 10 AS sort_number
UNION ALL SELECT '维护地点档案', 'house:knowledge:location:manage', 20
UNION ALL SELECT '查看知识标签', 'house:knowledge:tag:list', 30
UNION ALL SELECT '维护知识标签', 'house:knowledge:tag:manage', 40
UNION ALL SELECT '查看知识条目', 'house:knowledge:entry:list', 50
UNION ALL SELECT '新增知识条目', 'house:knowledge:entry:save', 60
UNION ALL SELECT '编辑知识条目', 'house:knowledge:entry:update', 70
UNION ALL SELECT '删除知识条目', 'house:knowledge:entry:remove', 80
) permission
WHERE menu.menu_id = @house_knowledge_menu_id
AND NOT EXISTS (
SELECT 1
FROM sys_menu existing
WHERE existing.tenant_id = @house_knowledge_tenant_id
AND existing.deleted = 0
AND existing.authority = permission.authority
);
-- 管理员拥有菜单及全部知识库维护权限。
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
SELECT role.role_id, menu.menu_id, @house_knowledge_tenant_id
FROM sys_role role
JOIN sys_menu menu
ON menu.tenant_id = @house_knowledge_tenant_id
AND menu.deleted = 0
WHERE role.tenant_id = @house_knowledge_tenant_id
AND role.deleted = 0
AND role.role_code IN ('admin', 'superAdmin')
AND (menu.menu_id = @house_knowledge_menu_id OR menu.parent_id = @house_knowledge_menu_id)
AND NOT EXISTS (
SELECT 1
FROM sys_role_menu existing
WHERE existing.role_id = role.role_id
AND existing.menu_id = menu.menu_id
AND existing.tenant_id = @house_knowledge_tenant_id
);
-- 顾问仅获得查看地点/标签及知识条目维护权限。
-- 将 @house_knowledge_advisor_role_code 设为实际角色编码后才会生效。
INSERT INTO sys_role_menu (role_id, menu_id, tenant_id)
SELECT role.role_id, menu.menu_id, @house_knowledge_tenant_id
FROM sys_role role
JOIN sys_menu menu
ON menu.tenant_id = @house_knowledge_tenant_id
AND menu.deleted = 0
WHERE @house_knowledge_advisor_role_code IS NOT NULL
AND role.tenant_id = @house_knowledge_tenant_id
AND role.deleted = 0
AND role.role_code = @house_knowledge_advisor_role_code
AND menu.authority IN (
'house:knowledge',
'house:knowledge:location:list',
'house:knowledge:tag:list',
'house:knowledge:entry:list',
'house:knowledge:entry:save',
'house:knowledge:entry:update',
'house:knowledge:entry:remove'
)
AND NOT EXISTS (
SELECT 1
FROM sys_role_menu existing
WHERE existing.role_id = role.role_id
AND existing.menu_id = menu.menu_id
AND existing.tenant_id = @house_knowledge_tenant_id
);
COMMIT;
-- 执行后校验:应返回一个父菜单、一个知识库菜单和 8 个按钮权限。
SELECT @house_knowledge_parent_menu_id AS parent_menu_id,
@house_knowledge_menu_id AS house_knowledge_menu_id;
SELECT menu_id, parent_id, title, path, component, menu_type, authority, sort_number
FROM sys_menu
WHERE tenant_id = @house_knowledge_tenant_id
AND deleted = 0
AND (menu_id = @house_knowledge_menu_id OR parent_id = @house_knowledge_menu_id)
ORDER BY menu_type, sort_number, menu_id;
SELECT role.role_code, role.role_name, menu.title, menu.authority
FROM sys_role_menu role_menu
JOIN sys_role role ON role.role_id = role_menu.role_id
JOIN sys_menu menu ON menu.menu_id = role_menu.menu_id
WHERE role_menu.tenant_id = @house_knowledge_tenant_id
AND menu.deleted = 0
AND (menu.menu_id = @house_knowledge_menu_id OR menu.parent_id = @house_knowledge_menu_id)
ORDER BY role.role_code, menu.menu_type, menu.sort_number, menu.menu_id;