147 lines
5.6 KiB
SQL
147 lines
5.6 KiB
SQL
-- 房源知识库后台菜单与权限。
|
||
-- 执行前请确认目标租户;当前开发环境为 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;
|