diff --git a/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs b/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs index 814d929a..38d7f6a7 100644 --- a/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs @@ -298,6 +298,10 @@ public class SysAuthService : IDynamicApiController, ITransient var posIds = await db.Queryable().InnerJoinIF(user.AccountType != AccountTypeEnum.SuperAdmin, (u, a) => a.PosId == u.Id && a.UserId == user.Id).Select((u, a) => u.Id).ToListAsync(); posIds = posIds.Concat([user.PosId]).Where(u => u != 0).ToList(); + var menuIds = await db.Queryable().InnerJoinIF(user.AccountType != AccountTypeEnum.SuperAdmin, (u, a) => a.MenuId == u.Id && roleIds.Contains(a.RoleId)) + .Where(u => u.Status == StatusEnum.Enable) + .Select((u, a) => u.Id) + .ToListAsync(); var maxDataScope = await db.Queryable().Where(u => roleIds.Contains(u.Id)).Select(u => u.DataScope).ToListAsync(); if (!maxDataScope.Any()) maxDataScope = [DataScopeEnum.Self]; @@ -327,6 +331,7 @@ public class SysAuthService : IDynamicApiController, ITransient OrgIds = orgIds, PosIds = posIds, RoleIds = roleIds, + MenuIds = menuIds, Permissions = permissions, UnauthorizedPermissions = unauthorizedPermissions, DataScopeList = user.AccountType == AccountTypeEnum.SuperAdmin ? [DataScopeEnum.All] : maxDataScope, diff --git a/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs b/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs index 86dbbadb..1c4a0cf2 100644 --- a/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs @@ -52,11 +52,10 @@ public class SysMenuService : IDynamicApiController, ITransient } else { - var menuIdList = await GetMenuIdList(); var menuTree = await _sysMenuRep.AsQueryable() .Where(u => u.Status == StatusEnum.Enable) .OrderBy(u => new { u.OrderNo, u.Id }) - .Distinct().ToTreeAsync(u => u.Children, u => u.Pid, 0, menuIdList.Select(d => (object)d).ToArray()); + .Distinct().ToTreeAsync(u => u.Children, u => u.Pid, 0, _userManager.MenuIds.Select(d => (object)d).ToArray()); DeleteBtnFromMenuTree(menuTree); return menuTree.Adapt>(); } diff --git a/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs b/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs index 169c52de..9581e5ac 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/UserManager.cs @@ -145,6 +145,11 @@ public class UserManager( /// public override List PosIds => Manager?.PosIds; + /// + /// 菜单Id集 + /// + public override List MenuIds => Manager?.MenuIds; + /// /// 权限集 /// diff --git a/Admin.NET/Admin.NET.Core/Service/User/UserManagerDao.cs b/Admin.NET/Admin.NET.Core/Service/User/UserManagerDao.cs index 059c55bd..b5a19fa3 100644 --- a/Admin.NET/Admin.NET.Core/Service/User/UserManagerDao.cs +++ b/Admin.NET/Admin.NET.Core/Service/User/UserManagerDao.cs @@ -132,6 +132,11 @@ public class UserManagerDao /// public virtual List PosIds { get; set; } + /// + /// 菜单Id集 + /// + public virtual List MenuIds { get; set; } + /// /// 移动端权限集 ///