-- 二期库位管理菜单和按钮权限。 -- 在 phase1-admin-rbac.sql、phase1-platform-master-data-and-permission-management.sql 之后执行,可重复执行。 USE baiyue_iam; SET NAMES utf8mb4; DROP PROCEDURE IF EXISTS repair_location_permission_ids; DELIMITER $$ CREATE PROCEDURE repair_location_permission_ids() BEGIN IF EXISTS ( SELECT 1 FROM iam_permission WHERE id IN (5103060, 5103061, 5103062, 5103063, 5103064) AND permission_code <> CASE id WHEN 5103060 THEN 'platform:location:list' WHEN 5103061 THEN 'platform:location:create' WHEN 5103062 THEN 'platform:location:edit' WHEN 5103063 THEN 'platform:location:status' WHEN 5103064 THEN 'platform:location:delete' END ) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库位权限迁移失败:5103060-5103064 已被其他权限占用'; END IF; IF EXISTS ( SELECT 1 FROM iam_permission WHERE (id = 5103040 AND NOT ( (permission_code = 'platform:download:list' AND parent_id = 5103000) OR (permission_code = 'platform:location:list' AND parent_id = 5103000))) OR (id = 5103041 AND NOT ( (permission_code = 'platform:download:all' AND parent_id = 5103040) OR (permission_code = 'platform:location:create' AND parent_id = 5103040))) ) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库位权限迁移失败:下载中心稳定 ID 被未知权限占用'; END IF; DROP TEMPORARY TABLE IF EXISTS tmp_location_role_grant; CREATE TEMPORARY TABLE tmp_location_role_grant ( role_id BIGINT UNSIGNED NOT NULL, tenant_id BIGINT UNSIGNED NOT NULL, permission_code VARCHAR(128) NOT NULL, PRIMARY KEY (role_id, tenant_id, permission_code) ) ENGINE=MEMORY; INSERT IGNORE INTO tmp_location_role_grant (role_id, tenant_id, permission_code) SELECT role_permission.role_id, role_permission.tenant_id, permission.permission_code FROM iam_role_permission role_permission JOIN iam_permission permission ON permission.id = role_permission.permission_id WHERE permission.permission_code IN ( 'platform:location:list', 'platform:location:create', 'platform:location:edit', 'platform:location:status', 'platform:location:delete' ); DELETE role_permission FROM iam_role_permission role_permission JOIN iam_permission permission ON permission.id = role_permission.permission_id WHERE permission.permission_code IN ( 'platform:location:list', 'platform:location:create', 'platform:location:edit', 'platform:location:status', 'platform:location:delete' ); DELETE FROM iam_permission WHERE permission_code IN ( 'platform:location:create', 'platform:location:edit', 'platform:location:status', 'platform:location:delete' ); DELETE FROM iam_permission WHERE permission_code = 'platform:location:list'; INSERT INTO iam_permission (id, tenant_id, app_code, permission_type, parent_id, permission_code, permission_name, route_path, http_method, sort_no, status, built_in, deleted) VALUES (5103040, 0, 'PLATFORM', 'MENU', 5103000, 'platform:download:list', '下载中心', '/downloads', NULL, 40, 'ACTIVE', 1, 0), (5103041, 0, 'PLATFORM', 'BUTTON', 5103040, 'platform:download:all', '查看全部下载任务', NULL, NULL, 10, 'ACTIVE', 1, 0) ON DUPLICATE KEY UPDATE permission_type = VALUES(permission_type), parent_id = VALUES(parent_id), permission_name = VALUES(permission_name), route_path = VALUES(route_path), http_method = VALUES(http_method), sort_no = VALUES(sort_no), status = 'ACTIVE', built_in = 1, deleted = 0; END$$ DELIMITER ; CALL repair_location_permission_ids(); DROP PROCEDURE repair_location_permission_ids; INSERT INTO iam_permission (id, tenant_id, app_code, permission_type, parent_id, permission_code, permission_name, route_path, http_method, sort_no, status, built_in, deleted) VALUES (5103060, 0, 'PLATFORM', 'MENU', 5103000, 'platform:location:list', '库位管理', '/master-data/locations', NULL, 40, 'ACTIVE', 1, 0), (5103061, 0, 'PLATFORM', 'BUTTON', 5103060, 'platform:location:create', '新增库位', NULL, NULL, 10, 'ACTIVE', 1, 0), (5103062, 0, 'PLATFORM', 'BUTTON', 5103060, 'platform:location:edit', '编辑库位', NULL, NULL, 20, 'ACTIVE', 1, 0), (5103063, 0, 'PLATFORM', 'BUTTON', 5103060, 'platform:location:status', '启停库位', NULL, NULL, 30, 'ACTIVE', 1, 0), (5103064, 0, 'PLATFORM', 'BUTTON', 5103060, 'platform:location:delete', '删除库位', NULL, NULL, 40, 'ACTIVE', 1, 0) ON DUPLICATE KEY UPDATE permission_type = VALUES(permission_type), parent_id = VALUES(parent_id), permission_name = VALUES(permission_name), route_path = VALUES(route_path), sort_no = VALUES(sort_no), status = 'ACTIVE', built_in = 1, deleted = 0; INSERT IGNORE INTO iam_role_permission (role_id, permission_id, tenant_id) SELECT grant_row.role_id, permission.id, grant_row.tenant_id FROM tmp_location_role_grant grant_row JOIN iam_permission permission ON permission.tenant_id = 0 AND permission.app_code = 'PLATFORM' AND permission.permission_code = grant_row.permission_code; -- 二期新增库位权限默认只授予平台系统管理员。 INSERT INTO iam_role_permission (role_id, permission_id, tenant_id) SELECT 4000001, id, 0 FROM iam_permission WHERE tenant_id = 0 AND app_code = 'PLATFORM' AND permission_code IN ( 'platform:location:list', 'platform:location:create', 'platform:location:edit', 'platform:location:status', 'platform:location:delete' ) ON DUPLICATE KEY UPDATE tenant_id = VALUES(tenant_id); DROP TEMPORARY TABLE IF EXISTS tmp_location_role_grant;