sunpengfei
2025-08-07 177aa6f1c4601e4fb34aff04c4e328c98b489888
FlexJobApi.User.Application/Auths/Queries/GetCurrentLogierMenuQueryHandler.cs
@@ -34,14 +34,20 @@
                .ProjectToType<GetMenuQueryResult>()
                .FirstOrDefaultAsync(cancellationToken);
            if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "该菜单");
            var items = await (from m in repMenu.AsQueryable().AsNoTracking()
                               join rm in repRoleMenu.AsQueryable().AsNoTracking() on m.Id equals rm.MenuId into rmg
                               from rmgi in rmg.DefaultIfEmpty()
                               join ur in repUserInfoRole.AsQueryable().AsNoTracking() on rmgi.RoleId equals ur.RoleId into urg
                               from urgi in urg.DefaultIfEmpty()
                               where m.ParentId == request.Id && (logier.Level == 999 || urgi.UserInfoId == logier.UserInfoId) && !m.IsDisabled
                               && (m.Type == EnumMenuType.Button || m.Type == EnumMenuType.Field)
                               select m).ProjectToType<GetMenuQueryResultItem>().ToListAsync(cancellationToken);
            var q = repMenu.AsQueryable().AsNoTracking()
                .Where(it => it.ParentId == model.Id)
                .Where(it => it.Type == EnumMenuType.Button || it.Type == EnumMenuType.Field);
            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 items = await q
                .ProjectToType<GetMenuQueryResultItem>()
                .ToListAsync(cancellationToken);
            model.Groups = items.GroupBy(it => it.Group ?? "default")
                .Select(it => new GetMenuQueryResultGroup
                {