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