sunpengfei
2025-08-07 177aa6f1c4601e4fb34aff04c4e328c98b489888
FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenusQueryHandler.cs
@@ -31,12 +31,19 @@
        public async Task<List<GetMenusQueryResultItem>> Handle(GetCurrentLogierMenusQuery request, CancellationToken cancellationToken)
        {
            var logier = JwtUtils.GetCurrentLogier();
            var all = await (from m in repMenu.AsQueryable().AsNoTracking()
                             join rm in repRoleMenu.AsQueryable().AsNoTracking() on m.Id equals rm.MenuId
                             join ur in repUserInfoRole.AsQueryable().AsNoTracking() on rm.RoleId equals ur.RoleId
                             where ur.UserInfoId == logier.UserInfoId && !m.IsDisabled
                             && (m.Type == EnumMenuType.Menu || m.Type == EnumMenuType.Page || m.Type == EnumMenuType.Modal)
                             select m).ProjectToType<GetMenusQueryResultItem>().ToListAsync();
            var q = repMenu.AsQueryable().AsNoTracking()
                .OrderBy(it => it.Sort)
                .Where(it => it.UserType == logier.Type && it.ClientType == logier.ClientType)
                .Where(it => it.Type == EnumMenuType.Menu || it.Type == EnumMenuType.Page || it.Type == EnumMenuType.Modal);
            if (logier.Level != 999)
            {
                var menuIds = await repRoleMenu.AsQueryable().AsNoTracking()
                    .Where(it => it.Role.UserInfoRoles.Any(ur => ur.UserInfoId == logier.UserInfoId))
                    .Select(it => it.MenuId)
                    .ToListAsync(cancellationToken);
                q = q.Where(it => menuIds.Contains(it.Id));
            }
            var all = await q.ProjectToType<GetMenusQueryResultItem>().ToListAsync();
            var models = all.Where(it => it.ParentId == null).ToList();
            LoopChildrens(models, all, []);
            return models;