using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Text; using System.Threading.Tasks; using AutoMapper; using Model.ModelDto.SysDto; using Model.ModelVm.SysVm; using SqlSugar; using Utility; using WMS.DAL.SystemService; using WMS.Entity.Context; using WMS.Entity.SysEntity; using WMS.IBLL.ISysServer; using WMS.IDAL.ISysInterface; namespace WMS.BLL.SysServer { /// /// 角色权限服务实践 /// public class RoleRightServer : IRoleRightServer { /// /// 依赖注入 /// private static readonly SqlSugarScope Db = DataContext.Db; private readonly UserManager _userManager; /// /// 构造函数 /// /// public RoleRightServer(UserManager userManager) { _userManager = userManager; } /// /// 获取用户的菜单权限 ----csc /// /// 用户Id /// public async Task> GetRoleMenuList() { var modUser = await Db.Queryable().FirstAsync(m => m.Id == _userManager.UserId && m.IsDel == "0"); if (modUser == null) { throw Oops.Bah("未查询到登录人信息"); } if (string.IsNullOrWhiteSpace(modUser.RoleNo)) { throw Oops.Bah("未查询到登录人的所属角色信息"); } return await Db.Queryable() .LeftJoin((a, b) => a.MenuNo == b.MenuNo) .LeftJoin((a, b, c) => a.RoleNo == c.RoleNo) .Where((a, b, c) => a.IsDel == "0" && b.IsDel == "0" && c.IsDel == "0") .Where((a, b, c) => a.RoleNo == modUser.RoleNo) .OrderBy((a, b, c) => b.Ord) .Select() .ToListAsync(); } /// /// 根据id获取角色权限信息列表(单表) /// /// 角色权限id /// public async Task> GetRoleRightOneListById(int id) { return await Db.Queryable().Where(s => s.IsDel == "0" && s.RoleNo == SqlFunc.Subqueryable().Where(c => c.IsDel == "0" && c.Id == id).Select(c => c.RoleNo)).ToListAsync(); } /// /// 新增角色权限信息 /// /// 菜单号 /// 角色号 /// /// 捕获异常 public async Task InsertRoleRight(string MenuNo, string RoleNo) { List listRole = await Db.Queryable().Where(s => s.RoleNo == RoleNo).ToListAsync(); if (listRole.Count > 0) { await Db.Deleteable().Where(s => s.RoleNo == RoleNo).ExecuteCommandAsync(); } var arr = MenuNo.Split(','); var listRight = new List(); //循环将菜单数组分别加入到数据模型中 for (int j = 0; j < arr.Count(); j++) { SysRoleRight roleright = new SysRoleRight(); roleright.RoleNo = RoleNo;//角色号 roleright.MenuNo = arr[j];//菜单号 roleright.CreateUser = _userManager.UserId;//创建人 roleright.CreateTime = DateTime.Now; listRight.Add(roleright); } await Db.Insertable(listRight).ExecuteCommandAsync(); //删除子级角色权限信息。(角色权限减少,角色下级权限同时减少) List listRoleDel = await Db.Queryable().Where(s => SqlFunc.Subqueryable().Where(c => c.RoleNo == RoleNo && s.Id == c.Id).Any()).ToListAsync(); var listRoleNo = listRoleDel.Select(s => s.RoleNo).Distinct().ToList(); List listRoleRight = await Db.Queryable().Where(s => listRoleNo.Contains(s.RoleNo)).ToListAsync(); foreach (var item in listRoleDel) { var listChildRoleRight = listRoleRight.Where(s => s.RoleNo == item.RoleNo).ToList(); foreach (var right in listChildRoleRight) { int first1 = Array.IndexOf(arr, right.MenuNo); if (first1 <= -1) { await Db.Deleteable().Where(s => s.RoleNo == item.RoleNo && s.MenuNo == right.MenuNo).ExecuteCommandAsync(); } } } } } }