From 4950d547503c7c1d5d0ff6487e6768937170ddf7 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期一, 04 八月 2025 17:29:00 +0800 Subject: [PATCH] feat:角色授权 --- FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-) diff --git a/FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs b/FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs index 323df8c..30f0999 100644 --- a/FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs +++ b/FlexJobApi.User.Application/Menus/Queries/GetMenusQueryHandler.cs @@ -16,20 +16,24 @@ /// 鏌ヨ鑿滃崟鍒楄〃 /// </summary> public class GetMenusQueryHandler( - IRepository<Menu> menuRep) + IRepository<Menu> rep) : IRequestHandler<GetMenusQuery, List<GetMenusQueryResultItem>> { - private readonly IRepository<Menu> menuRep = menuRep; + private readonly IRepository<Menu> rep = rep; /// <inheritdoc/> public async Task<List<GetMenusQueryResultItem>> Handle(GetMenusQuery request, CancellationToken cancellationToken) { - var q = menuRep.AsQueryable().AsNoTracking() + var q = rep.AsQueryable().AsNoTracking() .Where(it => it.UserType == request.UserType && it.ClientType == request.ClientType) .Where(it => it.Type == EnumMenuType.Menu || it.Type == EnumMenuType.Page || it.Type == EnumMenuType.Modal); var all = await q.ProjectToType<GetMenusQueryResultItem>().ToListAsync(); var models = all.Where(it => it.ParentId == null).ToList(); - LoopChildrens(models, all); + var roleMenuIds = + request.RoleId.HasValue + ? rep.Change<RoleMenu>().Where(it => it.RoleId == request.RoleId).DistinctSelect(it => it.MenuId) + : []; + LoopChildrens(models, all, roleMenuIds); return models; } @@ -38,14 +42,16 @@ /// </summary> /// <param name="models"></param> /// <param name="all"></param> - private void LoopChildrens(List<GetMenusQueryResultItem> models, List<GetMenusQueryResultItem> all) + /// <param name="roleMenuIds"></param> + private void LoopChildrens(List<GetMenusQueryResultItem> models, List<GetMenusQueryResultItem> all, List<Guid> roleMenuIds) { foreach (var item in models) { + item.IsChecked = roleMenuIds.Contains(item.Id); item.Childrens = all.Where(it => it.ParentId == item.Id).ToList(); if (item.Childrens.IsNotNull()) { - LoopChildrens(item.Childrens, all); + LoopChildrens(item.Childrens, all, roleMenuIds); } } } -- Gitblit v1.9.1