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