Merge pull request 'feat(Auth): 将用户菜单放入状态管理;修复不存在IUserSessionExtProps相关服务时登陆异常的问题' (#444) from jasondom/Admin.NET.Pro:v2 into v2

Reviewed-on: https://code.adminnet.top/Admin.NET/Admin.NET.Pro/pulls/444
This commit is contained in:
zuohuaijun 2025-09-04 12:38:17 +08:00
commit be345588b4
4 changed files with 17 additions and 3 deletions

View File

@ -298,6 +298,10 @@ public class SysAuthService : IDynamicApiController, ITransient
var posIds = await db.Queryable<SysPos>().InnerJoinIF<SysUserExtOrg>(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<SysMenu>().InnerJoinIF<SysRoleMenu>(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<SysRole>().Where(u => roleIds.Contains(u.Id)).Select(u => u.DataScope).ToListAsync();
if (!maxDataScope.Any()) maxDataScope = [DataScopeEnum.Self];
@ -327,11 +331,12 @@ 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,
AppPermissions = loginMode == LoginModeEnum.APP ? LazyHelper.GetService<SysCommonService>().Value.GetAppApiList() : null,
ExtProps = App.GetServices<IUserManagerExtProps>().SelectMany(u => u.GetInitExtProps(user)).ToDictionary(u => u.Key, u => u.Value)
ExtProps = App.GetServices<IUserManagerExtProps>()?.SelectMany(u => u.GetInitExtProps(user)).Where(u => !string.IsNullOrWhiteSpace(u.Key)).ToDictionary(u => u.Key, u => u.Value)
});
}

View File

@ -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<List<MenuOutput>>();
}

View File

@ -145,6 +145,11 @@ public class UserManager(
/// </summary>
public override List<long> PosIds => Manager?.PosIds;
/// <summary>
/// 菜单Id集
/// </summary>
public override List<long> MenuIds => Manager?.MenuIds;
/// <summary>
/// 权限集
/// </summary>

View File

@ -132,6 +132,11 @@ public class UserManagerDao
/// </summary>
public virtual List<long> PosIds { get; set; }
/// <summary>
/// 菜单Id集
/// </summary>
public virtual List<long> MenuIds { get; set; }
/// <summary>
/// 移动端权限集
/// </summary>