| | |
| | | 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 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 (logier.Level == 999 || urgi.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; |