From dea3361a936c554507dcd894654531c5f7edf9a2 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 24 Apr 2024 22:16:20 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=20=E8=8F=9C=E5=8D=95=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=80=92=E5=BD=92=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Menu/Services/Implements/MenuService.cs | 43 ++++++------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/Src/Dlhis.Sys/Menu/Services/Implements/MenuService.cs b/Src/Dlhis.Sys/Menu/Services/Implements/MenuService.cs index 78dea3b9..6092f066 100644 --- a/Src/Dlhis.Sys/Menu/Services/Implements/MenuService.cs +++ b/Src/Dlhis.Sys/Menu/Services/Implements/MenuService.cs @@ -78,7 +78,6 @@ public class MenuService : IMenuService Code = x, UniqueType = request.UniqueType, UniqueValue = request.UniqueValue - }).ToList(); await _dbContext.InsertAsync(permissions); @@ -87,48 +86,34 @@ public class MenuService : IMenuService public async Task> GetAssignmentCodesAsync(AssignTypeEnumType uniqueType, string uniqueData) { var permissionCodes = await _dbContext.Queryable() - .Where(x => x.UniqueType == uniqueType) - .Where(x => x.UniqueValue == uniqueData) - .Select(x => x.Code) - .ToListAsync(); + .Where(x => x.UniqueType == uniqueType) + .Where(x => x.UniqueValue == uniqueData) + .Select(x => x.Code) + .ToListAsync(); var menus = await GetListAsync(PlatformEnumType.PCAdmin); foreach (var menu in menus) { - if (menu.Items.Any()) - { - var codes = RecursionHandler(menu.Items, permissionCodes); - permissionCodes.RemoveAll(x => codes.Contains(x)); - } + RecursionHandler(menu, permissionCodes, permissionCodes.Contains(menu.Code)); } return permissionCodes; - static List RecursionHandler(List menus, List innerPermissions) + static bool RecursionHandler(MenuResponse current, List innerPermissions, bool add) { - var codes = new HashSet(); - foreach (var menu in menus) - { - if (menu.Items.Any()) - { - var innerPermissionCodes = RecursionHandler(menu.Items, innerPermissions); - foreach (var item in innerPermissionCodes) - { - codes.Add(item); - } - } + if (add) innerPermissions.Add(current.Code); - if (!innerPermissions.Contains(menu.Code)) + foreach (var menu in current.Items) + { + var currentAdd = RecursionHandler(menu, innerPermissions, add || innerPermissions.Contains(menu.Code)); + if (currentAdd && !innerPermissions.Contains(current.Code)) { - foreach (var item in menu.Items.Select(x => x.Code)) - { - codes.Add(item); - } + innerPermissions.Add(current.Code); } } - return codes.ToList(); + return add; } } @@ -150,6 +135,7 @@ public class MenuService : IMenuService { return await GetListAsync(PlatformEnumType.PCAdmin); } + return new List(); } @@ -229,7 +215,6 @@ public class MenuService : IMenuService private async Task CheckAsync(SaveMenuRequest request) { - //检查重复code var exists = await _dbContext.Queryable() .Where(x => x.Code == request.Code) From f112ef31608f1a9dc75686baeee3085799f28661 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 24 Apr 2024 22:32:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=20=E6=9D=83=E9=99=90=E9=80=92=E5=BD=92?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Menu/Services/Implements/MenuService.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Src/Dlhis.Sys/Menu/Services/Implements/MenuService.cs b/Src/Dlhis.Sys/Menu/Services/Implements/MenuService.cs index 6092f066..130efa5d 100644 --- a/Src/Dlhis.Sys/Menu/Services/Implements/MenuService.cs +++ b/Src/Dlhis.Sys/Menu/Services/Implements/MenuService.cs @@ -119,8 +119,21 @@ public class MenuService : IMenuService public async Task> GetAllAssignmentPermissionsAsync() { - var all = await GetAllAssignmentCodesAsync(); - return await _dbContext.Queryable().Where(x => all.Contains(x.Code)).Select(x => x.Permission).ToListAsync(); + var menus = await GetCurrentMenusAsync(); + return GetPermissions(menus).ToList(); + + IEnumerable GetPermissions(List innerMenuResponses) + { + foreach (var item in innerMenuResponses) + { + yield return item.Permission; + + foreach (var item1 in GetPermissions(item.Items)) + { + yield return item1; + } + } + } } public async Task> GetCurrentMenusAsync()