using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using Model.ModelDto.SysDto; using WMS.Entity; using WMS.Entity.SysEntity; using WMS.IBLL.ISysServer; using WMS.IDAL; using WMS.IDAL.ISysInterface; using Model.ModelVm.SysVm; using WMS.Entity.Context; using Utility; using Talk.Extensions; namespace WMS.BLL.SysServer { /// /// RBAC服务实践 /// public class RBACServer : IRBACServer { /// /// 依赖注入 /// public IRBACRepository _rbac { get; set; } private readonly IMenuRepository _menu; private readonly IRoleRightRepository _roleright; private static readonly SqlSugarScope Db = DataContext.Db; private readonly UserManager _userManager; /// /// 构造函数 /// /// /// /// public RBACServer(IRBACRepository rbac, IMenuRepository menu, IRoleRightRepository roleright, UserManager userManager) { _rbac = rbac; _menu = menu; _roleright = roleright; _userManager = userManager; } /// /// 获取rbac信息列表 /// /// public async Task> GetRBACLists(int roleid) { List rbaclist = await _rbac.GetRBACLists(roleid); return rbaclist; } /// /// 根据角色id获取对应菜单权限 /// /// /// public async Task> GetRoleRightList(int id) { return await Db.Queryable() .LeftJoin((a, b) => a.RoleNo == b.RoleNo) .LeftJoin((a, b, c) => a.MenuNo == c.MenuNo) .Where((a, b, c) => a.Id == id && a.IsDel == "0") .Select() .ToListAsync(); } /// /// 根据角色Id获取对应的菜单选中 /// /// /// public async Task> GetMenuByroleIdNew(int id) { List rolerightlist = await Db.Queryable().LeftJoin((a, b) => a.RoleNo == b.RoleNo) .LeftJoin((a, b, c) => a.MenuNo == c.MenuNo) .Where((a, b, c) => a.Id == id && a.IsDel == "0") .Select() .ToListAsync(); var listMenuNo = rolerightlist.Select(s => s.MenuNo).Distinct().ToList(); List listMenu = await Db.Queryable().OrderBy(m => m.MenuNo).Select(m => new FunctionMenuDto() { //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) { FunNew(listChild, item); } return listParent; } public void FunNew(List all, FunctionMenuDto curItem) { List childItems = all.Where(m => m.ParentId == curItem.MenuNo).ToList(); //得到子节点 curItem.children = childItems; //将子节点加入 //遍历子节点,进行递归,寻找子节点的子节点 foreach (var subItem in childItems) { FunNew(all, subItem); } } /// /// 分配权限显示 /// /// /// /// public async Task> GetRoleRightRBAC(string MenuNo, string UserId) { var modUser = await Db.Queryable().FirstAsync(s => s.Id == _userManager.UserId); return await Db.Queryable() .Where(s => s.IsDel == "0") .WhereIF(!string.IsNullOrEmpty(MenuNo), s => s.ParentNo == MenuNo) .WhereIF(modUser.UserName.ToUpper() != "ADMIN", s => SqlFunc.Subqueryable().Where(c => c.RoleNo == modUser.RoleNo && s.MenuNo == c.MenuNo).Any()) .OrderBy(s => s.Ord, OrderByType.Asc) .Select() .ToListAsync(); } } }