YD_SmartSports.Api/batch-delete-menu-permissions.sql

50 lines
1.7 KiB
MySQL
Raw Permalink Normal View History

SET XACT_ABORT ON;
BEGIN TRANSACTION;
DECLARE @menuUrl nvarchar(100);
DECLARE @menuId int;
DECLARE menu_cursor CURSOR LOCAL FAST_FORWARD FOR
SELECT Url FROM (VALUES (N'/studentsManage'), (N'/sportsHallClass')) AS menus(Url);
OPEN menu_cursor;
FETCH NEXT FROM menu_cursor INTO @menuUrl;
WHILE @@FETCH_STATUS = 0
BEGIN
IF (SELECT COUNT(*) FROM Sys_Menu
WHERE Url = @menuUrl AND ParentId > 0 AND MenuType = 0 AND Enable IN (1, 2)) <> 1
THROW 51001, N'页面菜单不存在或不唯一,请检查菜单配置', 1;
SELECT @menuId = Menu_Id FROM Sys_Menu
WHERE Url = @menuUrl AND ParentId > 0 AND MenuType = 0 AND Enable IN (1, 2);
IF EXISTS (SELECT 1 FROM Sys_Menu WHERE Menu_Id = @menuId
AND NULLIF(LTRIM(RTRIM(Auth)), N'') IS NOT NULL
AND (ISJSON(Auth) <> 1 OR LEFT(LTRIM(Auth), 1) <> N'['))
THROW 51002, N'菜单权限不是有效 JSON 数组,请先检查原始数据', 1;
UPDATE Sys_Menu
SET Auth = COALESCE(NULLIF(Auth, N''), N'[]')
WHERE Menu_Id = @menuId AND (Auth IS NULL OR Auth = N'');
UPDATE menu
SET Auth = JSON_MODIFY(menu.Auth, 'append $',
JSON_QUERY(N'{"text":"批量删除","value":"BatchDelete"}'))
FROM Sys_Menu AS menu
WHERE menu.Menu_Id = @menuId
AND NOT EXISTS (SELECT 1 FROM OPENJSON(menu.Auth)
WITH (Value nvarchar(100) '$.value') AS action
WHERE action.Value = N'BatchDelete');
FETCH NEXT FROM menu_cursor INTO @menuUrl;
END;
CLOSE menu_cursor;
DEALLOCATE menu_cursor;
COMMIT TRANSACTION;
SELECT MenuName, Url, Auth
FROM Sys_Menu
WHERE Url IN (N'/studentsManage', N'/sportsHallClass')
AND ParentId > 0 AND MenuType = 0;
GO