From 6778ebf0295313ce2b56bba000cef96e18afedd4 Mon Sep 17 00:00:00 2001
From: hwh <332078369@qq.com>
Date: 星期五, 28 六月 2024 08:10:11 +0800
Subject: [PATCH] 角色、权限

---
 Wms/WMS.BLL/SysServer/RBACServer.cs |   96 ++++++++++++++++++++++--------------------------
 1 files changed, 44 insertions(+), 52 deletions(-)

diff --git a/Wms/WMS.BLL/SysServer/RBACServer.cs b/Wms/WMS.BLL/SysServer/RBACServer.cs
index 5bb0c42..9b1ed93 100644
--- a/Wms/WMS.BLL/SysServer/RBACServer.cs
+++ b/Wms/WMS.BLL/SysServer/RBACServer.cs
@@ -12,6 +12,9 @@
 using WMS.IDAL;
 using WMS.IDAL.ISysInterface;
 using Model.ModelVm.SysVm;
+using WMS.Entity.Context;
+using Utility;
+using Talk.Extensions;
 
 namespace WMS.BLL.SysServer
 {
@@ -26,17 +29,20 @@
         public IRBACRepository _rbac { get; set; }
         private readonly IMenuRepository _menu;
         private readonly IRoleRightRepository _roleright;
+        private static readonly SqlSugarScope Db = DataContext.Db;
+        private readonly UserManager _userManager;
         /// <summary>
         /// 鏋勯�犲嚱鏁�
         /// </summary>
         /// <param name="rbac"></param>
         /// <param name="menu"></param>
         /// <param name="roleright"></param>
-        public RBACServer(IRBACRepository rbac, IMenuRepository menu, IRoleRightRepository roleright)
+        public RBACServer(IRBACRepository rbac, IMenuRepository menu, IRoleRightRepository roleright, UserManager userManager)
         {
             _rbac = rbac;
             _menu = menu;
             _roleright = roleright;
+            _userManager = userManager;
         }
 
         /// <summary>
@@ -54,10 +60,14 @@
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        public List<RoleRightDto> GetRoleRightList(int id)
+        public async Task<List<RoleRightDto>> GetRoleRightList(int id)
         {
-            List<RoleRightDto> roleRightDtos = _roleright.GetRoleRightListById(id);
-            return roleRightDtos;
+            return await Db.Queryable<SysRoleRight>()
+                           .LeftJoin<SysRoles>((a, b) => a.RoleNo == b.RoleNo)
+                           .LeftJoin<SysFunctionMenu>((a, b, c) => a.MenuNo == c.MenuNo)
+                           .Where((a, b, c) => a.Id == id && a.IsDel == "0")
+                           .Select<RoleRightDto>()
+                           .ToListAsync();
         }
 
         /// <summary>
@@ -65,53 +75,31 @@
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        public object GetMenuByroleIdNew(int id)
+        public async Task<List<FunctionMenuDto>> GetMenuByroleIdNew(int id)
         {
-            try
+            List<RoleRightDto> rolerightlist = await Db.Queryable<SysRoleRight>().LeftJoin<SysRoles>((a, b) => a.RoleNo == b.RoleNo)
+                                                                           .LeftJoin<SysFunctionMenu>((a, b, c) => a.MenuNo == c.MenuNo)
+                                                                           .Where((a, b, c) => a.Id == id && a.IsDel == "0")
+                                                                           .Select<RoleRightDto>()
+                                                                           .ToListAsync();
+            var listMenuNo = rolerightlist.Select(s => s.MenuNo).Distinct().ToList();
+            List<FunctionMenuDto> listMenu = await Db.Queryable<SysFunctionMenu>().OrderBy(m => m.MenuNo).Select(m => new FunctionMenuDto()
             {
-                List<RoleRightDto> rolerightlist = _roleright.GetRoleRightListById(id);
-                //var list = DataContext.WmsSysRight.Where(m => m.UserGroupId == id).ToList();
-                var str = new List<string>();
-                foreach (var item in rolerightlist)
-                {
-                    str.Add(item.MenuNo);
-                }
-                string sql1 = $"select * from SysFunctionMenu where IsDel = '0' and ParentNo = ''";
-                List<FunctionMenuDto> parent = _menu.GetMenuList(sql1).OrderBy(m => m.MenuNo).Select(m => new FunctionMenuDto()
-                {
-                    //Id = m.Id,
-                    MenuNo = m.MenuNo,
-                    ParentId = m.ParentNo,
-                    title = m.MenuName,
-                    //expand = str.Contains(m.Id),
-                    @checked = str.Contains(m.MenuNo)
-                }).ToList();
-
-                string sql2 = $"select * from SysFunctionMenu where IsDel = '0' and ParentNo != ''";
-                List<FunctionMenuDto> child = _menu.GetMenuList(sql2).OrderBy(m => m.MenuNo).Select(m => new FunctionMenuDto()
-                {
-                    //Id = m.Id,
-                    MenuNo = m.MenuNo,
-                    ParentId = m.ParentNo,
-                    title = m.MenuName,
-                    Expand = str.Contains(m.MenuNo),
-                    @checked = str.Contains(m.MenuNo)
-                }).ToList();
-
-                List<FunctionMenuDto> data = new List<FunctionMenuDto>();
-
-                foreach (var item in parent)
-                {
-                    data.Add(item);
-                    FunNew(child, item);
-                }
-                return data;
-
-            }
-            catch (Exception ex)
+                //Id = m.Id,
+                MenuNo = m.MenuNo,
+                ParentId = m.ParentNo,
+                title = m.MenuName,
+                Expand = listMenuNo.Contains(m.MenuNo),
+                @checked = listMenuNo.Contains(m.MenuNo)
+            }).ToListAsync();
+            var listParent = listMenu.Where(s => s.ParentId == "").ToList();
+            var listChild = listMenu.Where(s => s.ParentId != "").ToList();
+            foreach (var item in listParent)
             {
-                throw new Exception("鑾峰彇瑙掕壊瀵瑰簲鐨勮彍鍗曚俊鎭�" + ex.Message);
+                FunNew(listChild, item);
             }
+            return listParent;
+
         }
         public void FunNew(List<FunctionMenuDto> all, FunctionMenuDto curItem)
         {
@@ -123,7 +111,6 @@
             {
                 FunNew(all, subItem);
             }
-
         }
 
 
@@ -134,11 +121,16 @@
         /// <param name="MenuNo"></param>
         /// <param name="UserId"></param>
         /// <returns></returns>
-        public List<FunctionMenuDto> GetRoleRightRBAC(string MenuNo, string UserId)
+        public async Task<List<FunctionMenuDto>> GetRoleRightRBAC(string MenuNo, string UserId)
         {
-            List<FunctionMenuDto> menudto = _menu.GetMenuDtoList(MenuNo,UserId);
-
-            return menudto;
+            var modUser = await Db.Queryable<SysUserInfor>().FirstAsync(s => s.Id == _userManager.UserId);
+            return await Db.Queryable<SysFunctionMenu>()
+                            .Where(s => s.IsDel == "0")
+                            .WhereIF(!string.IsNullOrEmpty(MenuNo), s => s.ParentNo == MenuNo)
+                            .WhereIF(modUser.UserName.ToUpper() != "ADMIN", s => SqlFunc.Subqueryable<SysRoleRight>().Where(c => c.RoleNo == modUser.RoleNo && s.MenuNo == c.MenuNo).Any())
+                            .OrderBy(s => s.Ord, OrderByType.Asc)
+                            .Select<FunctionMenuDto>()
+                            .ToListAsync();
         }
     }
 }

--
Gitblit v1.8.0