public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "") { if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } int intPageSize = 50; var data = await _sysUserInfoServices.QueryPage(a => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key))), page, intPageSize, " uID desc "); #region MyRegion var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false); var allRoles = await _roleServices.Query(d => d.IsDeleted == false); var sysUserInfos = data.data; foreach (var item in sysUserInfos) { item.RID = (allUserRoles.FirstOrDefault(d => d.UserId == item.uID)?.RoleId).ObjToInt(); item.RoleName = allRoles.FirstOrDefault(d => d.Id == item.RID)?.Name; } data.data = sysUserInfos; #endregion return(new MessageModel <PageModel <sysUserInfo> >() { msg = "获取成功", success = data.dataCount >= 0, response = data }); }
public async Task <BaseResponse <PageModel <UserInfo> > > Get(int page = 1, string key = "") { if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } int intPageSize = 50; var data = await _sysUserInfoServices.QueryPage(a => a.DataFlag == 1 && ((a.UserName != null && a.UserName.Contains(key)) || (a.NickName != null && a.NickName.Contains(key))), page, intPageSize, " Id desc "); #region MyRegion var allUserRoles = await _userRoleServices.Query(); var allRoles = await _roleServices.Query(d => d.IsDrop == false); var sysUserInfos = data.Models; foreach (var item in sysUserInfos) { var currentUserRoles = allUserRoles.Where(d => d.UserId == item.Id)?.Select(d => d.RoleId).ToList(); item.RIDs = currentUserRoles; item.RoleNames = allRoles.Where(d => currentUserRoles.Contains((int)d.Id))?.Select(d => d.Name).ToList(); } data.Models = sysUserInfos; #endregion return(new BaseResponse <PageModel <UserInfo> >() { Data = data }); }
public async Task <MessageModel <PageModel <SysUserInfoDto> > > Get(int page = 1, string key = "") { if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } int intPageSize = 50; var data = await _sysUserInfoServices.QueryPage(a => a.IsDeleted != true && a.Status >= 0 && ((a.LoginName != null && a.LoginName.Contains(key)) || (a.RealName != null && a.RealName.Contains(key))), page, intPageSize, " Id desc "); #region MyRegion // 这里可以封装到多表查询,此处简单处理 var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false); var allRoles = await _roleServices.Query(d => d.IsDeleted == false); var sysUserInfos = data.data; foreach (var item in sysUserInfos) { var currentUserRoles = allUserRoles.Where(d => d.UserId == item.Id).Select(d => d.RoleId).ToList(); item.RIDs = currentUserRoles; item.RoleNames = allRoles.Where(d => currentUserRoles.Contains(d.Id)).Select(d => d.Name).ToList(); } data.data = sysUserInfos; #endregion return(Success(data.ConvertTo <SysUserInfoDto>(_mapper))); }
public async Task <MessageModel <PageModel <Role> > > Get(int page = 1, int f = 0, string key = "") { if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } int intPageSize = 50; //var roleList = await _roleServices.QueryPage(a => a.IsDeleted != true && (a.Name != null && a.Name.Contains(key)), page, intPageSize, " Id desc "); var userRoleIds = (await _userRoleServices.Query(it => it.UserId == _user.ID && it.IsDeleted == false)).Select(it => it.RoleId).ToList(); PageModel <Role> roles; if (userRoleIds.Contains(1)) { roles = await _roleServices.QueryPage(a => a.IsDeleted != true && a.Pid == f && (key == "" || a.Name != null && a.Name.Contains(key)), page, intPageSize, " Id desc "); } else { if (f > 0) { roles = await _roleServices.QueryPage(a => a.IsDeleted != true && a.Pid == f && (key == "" || a.Name != null && a.Name.Contains(key)), page, intPageSize, " Id desc "); } else { roles = await _roleServices.QueryPage(a => a.IsDeleted != true && userRoleIds.Contains(a.Id) && (key == "" || a.Name != null && a.Name.Contains(key)), page, intPageSize, " Id desc "); } } foreach (var item in roles.data) { List <int> pidarr = new List <int> { }; var parent = await _roleServices.QueryById(item.Pid); while (parent != null) { pidarr.Add(parent.Id); parent = await _roleServices.QueryById(parent.Pid); } pidarr.Reverse(); pidarr.Insert(0, 0); item.PidArr = pidarr; item.hasChildren = await _roleServices.ExistsChild(item.Id); } return(new MessageModel <PageModel <Role> >() { msg = "获取成功", success = roles.dataCount >= 0, response = roles }); }
public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "") { var data = new MessageModel <PageModel <sysUserInfo> >(); int intTotalCount = 50; int TotalCount = 0; int PageCount = 1; List <sysUserInfo> sysUserInfos = new List <sysUserInfo>(); sysUserInfos = await _sysUserInfoServices.Query(a => a.tdIsDelete != true && a.uStatus >= 0); if (!string.IsNullOrEmpty(key)) { sysUserInfos = sysUserInfos.Where(t => (t.uLoginName != null && t.uLoginName.Contains(key)) || (t.uRealName != null && t.uRealName.Contains(key))).ToList(); } //筛选后的数据总数 TotalCount = sysUserInfos.Count; //筛选后的总页数 PageCount = (Math.Ceiling(TotalCount.ObjToDecimal() / intTotalCount.ObjToDecimal())).ObjToInt(); sysUserInfos = sysUserInfos.OrderByDescending(d => d.uID).Skip((page - 1) * intTotalCount).Take(intTotalCount).ToList(); var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false); var allRoles = await _roleServices.Query(d => d.IsDeleted == false); foreach (var item in sysUserInfos) { item.uLoginPWD = "no see me"; if (item != null) { item.RID = (allUserRoles.Where(d => d.UserId == item.uID).FirstOrDefault()?.RoleId).ObjToInt(); item.RoleName = allRoles.Where(d => d.Id == item.RID).FirstOrDefault()?.Name; } } return(new MessageModel <PageModel <sysUserInfo> >() { msg = "获取成功", success = TotalCount >= 0, response = new PageModel <sysUserInfo>() { page = page, pageCount = PageCount, dataCount = TotalCount, data = sysUserInfos, } }); }
public async Task <MessageModel <string> > Put([FromBody] sysUserInfo sysUserInfo) { var data = new MessageModel <string>(); if (sysUserInfo != null && sysUserInfo.uID > 0) { if (sysUserInfo.RID > 0) { var usrerole = await _userRoleServices.Query(d => d.UserId == sysUserInfo.uID && d.RoleId == sysUserInfo.RID); if (usrerole.Count == 0) { await _userRoleServices.Add(new UserRole(sysUserInfo.uID, sysUserInfo.RID)); } } data.success = await _sysUserInfoServices.Update(sysUserInfo); if (data.success) { data.msg = "更新成功"; data.response = sysUserInfo?.uID.ObjToString(); } } return(data); }
public async Task <JsonResponse> DisRole([FromBody] DisRoleViewModel vm) { var user = await _userServices.QueryById(vm.UserId); if (user == null) { throw new UserOperationException("用户不存在"); } _unitOfWork.Begin(); var userRoles = (await _userRoleServices.Query(p => p.UserId == vm.UserId)).ToList(); var removeCount = 0; var addCount = 0; foreach (var userRole in userRoles) { removeCount += await _userRoleServices.DeleteByIdAsync(userRole.Id); } foreach (var roleId in vm.RoleIds) { var userRoleId = await _userRoleServices.AddAsync(new SysUserRole { UserId = vm.UserId, RoleId = roleId }); addCount += userRoleId > 0 ? 1 : 0; } if (!(removeCount == userRoles.Count && addCount == vm.RoleIds.Count)) { _unitOfWork.Rollback(); throw new UserOperationException("操作失败"); } _unitOfWork.Commit(); return(new JsonResponse(true)); }
public async Task <MessageModel <NavigationBar> > GetNavigationBar(int uid) { var data = new MessageModel <NavigationBar>(); if (uid > 0) { var roleId = ((await _userRoleServices.Query(d => d.IsDeleted == false && d.UserId == uid)).FirstOrDefault()?.RoleId).ObjToInt(); if (roleId > 0) { var pids = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && d.RoleId == roleId)).Select(d => d.PermissionId.ObjToInt()).Distinct(); if (pids.Any()) { var rolePermissionMoudles = (await _permissionServices.Query(d => pids.Contains(d.Id) && d.IsButton == false)).OrderBy(c => c.OrderSort); var permissionTrees = (from child in rolePermissionMoudles where child.IsDeleted == false orderby child.Id select new NavigationBar { id = child.Id, name = child.Name, pid = child.Pid, order = child.OrderSort, path = child.Code, iconCls = child.Icon, meta = new NavigationBarMeta { requireAuth = true, title = child.Name, } }).ToList(); NavigationBar rootRoot = new NavigationBar() { id = 0, pid = 0, order = 0, name = "根节点", path = "", iconCls = "", meta = new NavigationBarMeta(), }; permissionTrees = permissionTrees.OrderBy(d => d.order).ToList(); RecursionHelper.LoopNaviBarAppendChildren(permissionTrees, rootRoot); data.success = true; if (data.success) { data.response = rootRoot; data.msg = "获取成功"; } } } } return(data); }
public async Task <MessageModel <PermissionTree> > GetPermissionTree(int pid = 0, bool needbtn = false) { var data = new MessageModel <PermissionTree>(); var roleIds = (await _userRoleServices.Query(d => d.IsDeleted == false && d.UserId == _user.ID)).Select(d => d.RoleId.ObjToInt()).Distinct().ToList(); var pids = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && roleIds.Contains(d.RoleId))).Select( d => d.PermissionId.ObjToInt()).Distinct(); PermissionTree rootRoot = new PermissionTree { value = 0, Pid = 0, label = "根节点" }; if (pids.Any() || roleIds.Contains(1))//超级管理员 { IOrderedEnumerable <Permission> rolePermissionMoudles; if (roleIds.Contains(1)) { rolePermissionMoudles = (await _permissionServices.Query(d => d.IsDeleted == false)).OrderBy(c => c.OrderSort); } else { rolePermissionMoudles = (await _permissionServices.Query(d => pids.Contains(d.Id) && d.IsDeleted == false)).OrderBy(c => c.OrderSort); } var permissionTrees = (from child in rolePermissionMoudles orderby child.Id select new PermissionTree { value = child.Id, label = child.Name, Pid = child.Pid, isbtn = child.IsButton, order = child.OrderSort, }).ToList(); permissionTrees = permissionTrees.OrderBy(d => d.order).ToList(); RecursionHelper.LoopToAppendChildren(permissionTrees, rootRoot, pid, needbtn); } data.success = true; if (data.success) { data.response = rootRoot; data.msg = "获取成功"; } return(data); }
public async Task <List <Role> > GetUserRoleByUserId(long userId) { var userRoleList = await _userRoleServices.Query(c => c.UserId == userId); var roleIds = userRoleList.Select(s => s.RoleId); var roleList = await _roleRepository.Query(m => roleIds.Contains(m.Id)); return(roleList); }
public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "") { if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } int intPageSize = 50; var data = await _sysUserInfoServices.QueryPage(a => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key))), page, intPageSize, " uID desc "); #region MyRegion // 这里可以封装到多表查询,此处简单处理 var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false); var allRoles = await _roleServices.Query(d => d.IsDeleted == false); var sysUserInfos = data.data; foreach (var item in sysUserInfos) { var currentUserRoles = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList(); item.RIDs = currentUserRoles; item.RoleNames = allRoles.Where(d => currentUserRoles.Contains(d.Id)).Select(d => d.Name).ToList(); } data.data = sysUserInfos; #endregion return(new MessageModel <PageModel <sysUserInfo> >() { msg = "获取成功", success = data.dataCount >= 0, response = data }); }
/// <summary> /// 获取某个用户的所有下级角色 /// </summary> /// <param name="userId">用户id</param> /// <returns></returns> public async Task <List <Role> > GetNextRoles(int userId) { var userRoleList = await userRoleServices.Query(it => it.UserId == userId && it.IsDeleted == false); var roleList = new List <Role>(); var allRoleList = await _dal.Query(it => it.IsDeleted == false); userRoleList.ForEach(it => { var role = allRoleList.Find(a => a.Id == it.RoleId); RecursionHelper.LoopToAppendList(allRoleList, role, roleList); }); return(roleList); }
public async Task<ApiResponseModel<NavigationBarDto>> GetNavigationBar(int uid) { var token = _httpContext.HttpContext.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); var id = JwtHelper.SerializeJwt(token)?.Uid; if (id != uid) { return ApiResponse.Error<NavigationBarDto>("参数和token不一样"); } var roleIds = (await _userRoleServices.Query(m => m.IsDeleted == false && m.UserId == id)).Select(m => m.RoleId).Distinct().ToList(); if (!roleIds.Any()) { return ApiResponse.Error<NavigationBarDto>("用户未分配角色"); } var permissionIds = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && roleIds.Contains(d.RoleId))).Select(m => m.PermissionId).Distinct().ToList(); var permissionList = (await _permissionServices.Query(m => permissionIds.Contains(m.Id) && m.IsDeleted == false)).OrderBy(c => c.OrderSort).ToList(); var permissionTree = permissionList.Select(child => new NavigationBarDto { id = child.Id, name = child.Name, pid = child.Pid, order = child.OrderSort, path = child.Code, iconCls = child.Icon, Func = child.Func, IsHide = child.IsHide.ObjToBool(), IsButton = child.IsButton.ObjToBool(), meta = new NavigationBarMetaDto { requireAuth = true, title = child.Name, NoTabPage = child.IsHide.ObjToBool() } }).ToList(); NavigationBarDto rootRoot = new NavigationBarDto { id = 0, pid = 0, order = 0, name = "根节点", path = "", iconCls = "", meta = new NavigationBarMetaDto(), }; LoopNaviBarAppendChildren(permissionTree, rootRoot); return ApiResponse.Success(rootRoot); }
public async Task <IActionResult> Login(LoginInput input) { if (string.IsNullOrWhiteSpace(input.UserName)) { throw new UserOperationException("请输入用户名!"); } if (string.IsNullOrWhiteSpace(input.Password)) { throw new UserOperationException("请输入密码!"); } var user = (await _userServices.Query(u => u.UserName == input.UserName && u.Password == MD5Helper.MD5Encrypt32(input.Password))).SingleOrDefault(); if (user == null) { throw new UserOperationException("用户不存在或密码错误!"); } if (user.Status == 0) { throw new UserOperationException("您的账号已被禁用!"); } var tokenModel = new TokenModelJwt { UserId = user.Id }; var userRoles = await _userRoleServices.Query(ur => ur.UserId == user.Id); if (userRoles.Any()) { var roleIds = userRoles.Select(ur => ur.RoleId).ToList(); var roles = await _roleServices.Query(r => roleIds.Contains(r.Id)); tokenModel.Roles = roles.Select(r => r.Name).ToList(); } var userPermissions = await _permissionServices.GetUserPermissions(user.Id); _requirement.Permissions = userPermissions.Select(p => new Permission { Role = p.RoleName, Url = p.LinkUrl }).ToList(); var token = _jwtHelper.BuildJwtToken(tokenModel); return(Ok(token)); }
/// <summary> /// /// </summary> /// <param name="loginName"></param> /// <param name="loginPwd"></param> /// <returns></returns> public async Task <string> GetUserRoleNameStr(string loginName, string loginPwd) { string roleName = ""; var user = (await base.Query(a => a.uLoginName == loginName && a.uLoginPWD == loginPwd)).FirstOrDefault(); if (user != null) { var userRoles = await _userRoleServices.Query(ur => ur.UserId == user.uID); if (userRoles.Count > 0) { var roles = await _roleRepository.QueryByIDs(userRoles.Select(ur => ur.RoleId.ObjToString()).ToArray()); roleName = string.Join(',', roles.Select(r => r.Name).ToArray()); } } return(roleName); }
/// <summary> /// /// </summary> /// <param name="loginName"></param> /// <param name="loginPwd"></param> /// <returns></returns> public async Task <string> GetUserRoleNameStr(string loginName, string loginPwd) { string roleName = ""; var user = (await base.Query(a => a.UserName == loginName && a.UserPWD == loginPwd)).FirstOrDefault(); var roleList = await _roleRepository.Query(a => a.IsDrop == false); if (user != null) { var userRoles = await _userRoleServices.Query(ur => ur.UserId == user.Id); if (userRoles.Count > 0) { var arr = userRoles.Select(ur => ur.RoleId.ToString()).ToList(); var roles = roleList.Where(d => arr.Contains(d.Id.ToString())); roleName = string.Join(',', roles.Select(r => r.Name).ToArray()); } } return(roleName); }
public async Task <string> GetUserRoleNameStr(string loginName, string loginPwd) { string roleName = ""; var user = (await base.Query(a => a.ULoginName == loginName && a.ULoginPwd == loginPwd)).FirstOrDefault(); var roleList = await m_RoleRepository.Query(a => a.IsDeleted == false); if (user != null) { var userRole = await m_UserRolesServices.Query(q => q.UserId == user.UId); if (userRole.Count > 0) { var arr = userRole.Select(s => s.RoleId.ObjToString()).ToList(); var roles = roleList.Where(w => arr.Contains(w.Id.ObjToString())); roleName = string.Join(',', roles.Select(s => s.Name).ToArray()); } } return(roleName); }
public BaseResponse UserList(int page = 1, string key = "") { int pageSize = 10; var pager = new Pager(page, pageSize); var query = _userServices.Find(); if (!string.IsNullOrEmpty(key)) { query = query.Where(t => t.RealName.Contains(key)); } pager.TotalCount = query.Count(); var data = query.OrderByDescending(x => x.Id).Skip(pager.PageSize * (pager.Page - 1)).Take(pager.PageSize).ToList(); var allUserRoles = _userRoleServices.Query(d => d.IsDeleted == false).ToList(); var allRoles = _roleServices.Query(d => d.IsDeleted == false).ToList(); foreach (var item in data) { item.RID = (allUserRoles.FirstOrDefault(d => d.UserId == item.Id)?.RoleId).ToInt(); item.RoleName = allRoles.FirstOrDefault(d => d.Id == item.RID)?.Name; } var rep = new SuccessListResponse <List <User> >(data, pager); return(rep); }
public async Task <MessageModel <NavigationBar> > GetNavigationBar(int uid) { var data = new MessageModel <NavigationBar>(); // 两种方式获取 uid var uidInHttpcontext1 = (from item in _httpContext.HttpContext.User.Claims where item.Type == "jti" select item.Value).FirstOrDefault().ObjToInt(); var uidInHttpcontext = (JwtHelper.SerializeJwt(_httpContext.HttpContext.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", "")))?.Uid; if (uid > 0 && uid == uidInHttpcontext) { var roleId = ((await _userRoleServices.Query(d => d.IsDeleted == false && d.UserId == uid)).FirstOrDefault()?.RoleId).ObjToInt(); if (roleId > 0) { var pids = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && d.RoleId == roleId)).Select(d => d.PermissionId.ObjToInt()).Distinct(); if (pids.Any()) { var rolePermissionMoudles = (await _permissionServices.Query(d => pids.Contains(d.Id) && d.IsButton == false)).OrderBy(c => c.OrderSort); var permissionTrees = (from child in rolePermissionMoudles where child.IsDeleted == false orderby child.Id select new NavigationBar { id = child.Id, name = child.Name, pid = child.Pid, order = child.OrderSort, path = child.Code, iconCls = child.Icon, IsHide = child.IsHide.ObjToBool(), meta = new NavigationBarMeta { requireAuth = true, title = child.Name, NoTabPage = child.IsHide.ObjToBool() } }).ToList(); NavigationBar rootRoot = new NavigationBar() { id = 0, pid = 0, order = 0, name = "根节点", path = "", iconCls = "", meta = new NavigationBarMeta(), }; permissionTrees = permissionTrees.OrderBy(d => d.order).ToList(); RecursionHelper.LoopNaviBarAppendChildren(permissionTrees, rootRoot); data.success = true; if (data.success) { data.response = rootRoot; data.msg = "获取成功"; } } } } return(data); }
public async Task <BaseResponse <RouterBar> > GetNavigationBar(int uid) { var data = new BaseResponse <RouterBar>(); try { #region MyRegion //RouterBar rootRoot = new RouterBar() //{ // id = 0, // pid = 0, // order = 0, // name = "根节点", // path = "", // icon = "", // //meta = new NavigationBarMeta(), //}; //RouterBar lst1 = new RouterBar //{ // id = 1, // APIAddress = "", // icon = "fa-qq", // leaf = true, // path = "/", // name = "首页", // pid = 1 //}; //RouterBar lst1_1 = new RouterBar //{ // id = 1, // APIAddress = "", // leaf = true, // path = "", // name = "About", // pid = 1 //}; //lst1.children.Add(lst1_1); //RouterBar lst2 = new RouterBar //{ // id = 1, // APIAddress = "", // icon = "fa-users", // leaf = false, // path = "/Home", // name = "权限管理", // pid = 1 //}; //RouterBar lst2_1 = new RouterBar //{ // id = 1, // APIAddress = "", // icon = "fa-qq", // leaf = false, // path = "/User/User", // name = "用户管理", // pid = 1 //}; //RouterBar lst2_2 = new RouterBar //{ // id = 1, // APIAddress = "", // icon = "fa-qq", // leaf = false, // path = "/User/Roles", // name = "角色管理", // pid = 1 //}; //RouterBar lst2_3 = new RouterBar //{ // id = 1, // APIAddress = "", // icon = "fa-qq", // leaf = false, // path = "/Menu/Menu", // name = "菜单管理", // pid = 1 //}; //lst2.children.Add(lst2_1); //lst2.children.Add(lst2_2); //lst2.children.Add(lst2_3); //rootRoot.children.Add(lst1); //rootRoot.children.Add(lst2); //data.Data = rootRoot; #endregion // 三种方式获取 uid var uidInHttpcontext1 = (from item in _httpContext.HttpContext.User.Claims where item.Type == "jti" select item.Value).FirstOrDefault(); var uidInHttpcontext = (JwtHelper.SerializeJwt(_httpContext.HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", "")))?.Uid; var uName = _user.Name; if (uid > 0 && uid == uidInHttpcontext) { var roleId = ((await _userRoleServices.Query(d => d.UserId == uid)).FirstOrDefault()?.RoleId); if (roleId > 0) { var menus = await _menuServices.Query(d => d.IsDrop == false); var menusTrees = (from item in menus where item.IsDrop == false orderby item.Id select new RouterBar { id = item.Id, APIAddress = item.ApiUrl, icon = item.Icon, leaf = item.RoutePath == "-" ? false : true, path = item.RoutePath, name = item.Name, pid = item.ParentId, order = item.OrderSort, }).ToList(); RouterBar rootRoot = new RouterBar() { id = 0, pid = 0, order = 0, name = "根节点", path = "", icon = "" }; menusTrees = menusTrees.OrderBy(d => d.order).ToList(); RecursionHelper.LoopNaviBarAppendChildren(menusTrees, rootRoot); data.Data = rootRoot; data.Msg = "获取成功"; } } } catch (Exception ex) { } return(data); }
public async Task <MessageModel <PageModel <sysUserInfo> > > Get(int page = 1, string key = "") { if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) { key = ""; } int intPageSize = 50; var nextRoleIds = (await _roleServices.GetNextRoles(_user.ID)).Select(it => it.Id).ToList(); var data = await _sysUserInfoServices.QueryTabsPage <sysUserInfo, UserRole, sysUserInfo>((a, b) => new object[] { JoinType.Inner, a.uID == b.UserId }, (a, b) => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key)) && nextRoleIds.Contains(b.RoleId)), a => new { a.uID }, (a, b) => a, page, intPageSize, " uID desc "); #region MyRegion // 这里可以封装到多表查询,此处简单处理 var userIds = data.data.Select(it => it.uID).ToList(); var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false && userIds.Contains(d.UserId)); var allRoles = await _roleServices.Query(d => d.IsDeleted == false); var currentRoleId = (await _userRoleServices.Query(it => it.UserId == _user.ID && it.IsDeleted == false)).FirstOrDefault(); var sysUserInfos = data.data; foreach (var item in sysUserInfos) { item.RIDArray = await _roleServices.GetPreviousRoleIds(item.uID); var userRoleIds = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList(); List <List <int> > roleIds = new List <List <int> >(); foreach (var roleId in userRoleIds) { List <int> ids = new List <int>(); var role = allRoles.Where(it => it.Id == roleId).FirstOrDefault(); if (role == null) { continue; } ids.Add(role.Id); Role parent = allRoles.Where(it => it.Id == role.Pid).FirstOrDefault(); if (parent != null) { ids.Add(parent.Id); } while (parent != null) { parent = allRoles.Where(it => it.Id == parent.Pid).FirstOrDefault(); if (parent != null) { ids.Add(parent.Id); } } ; ids.Reverse(); roleIds.Add(ids); } item.RIDs = new List <int>(); item.RIDArray = roleIds; item.RoleNames = allRoles.Where(d => userRoleIds.Contains(d.Id)).Select(d => d.Name).ToList(); } data.data = sysUserInfos; #endregion return(new MessageModel <PageModel <sysUserInfo> >() { msg = "获取成功", success = data.dataCount >= 0, response = data }); }
// 重写异步处理程序 protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) { var httpContext = _accessor.HttpContext; // 获取系统中所有的角色和菜单的关系集合 if (!requirement.Permissions.Any()) { var data = await _roleModulePermissionServices.RoleModuleMaps(); var list = new List <PermissionItem>(); // ids4和jwt切换 // ids4 if (Permissions.IsUseIds4) { list = (from item in data where item.IsDeleted == false orderby item.Id select new PermissionItem { Url = item.Module?.LinkUrl, Role = item.Role?.Id.ObjToString(), }).ToList(); } // jwt else { list = (from item in data where item.IsDeleted == false orderby item.Id select new PermissionItem { Url = item.Module?.LinkUrl, Role = item.Role?.Name.ObjToString(), }).ToList(); } requirement.Permissions = list; } if (httpContext != null) { var questUrl = httpContext.Request.Path.Value.ToLower(); // 整体结构类似认证中间件UseAuthentication的逻辑,具体查看开源地址 // https://github.com/dotnet/aspnetcore/blob/master/src/Security/Authentication/Core/src/AuthenticationMiddleware.cs httpContext.Features.Set <IAuthenticationFeature>(new AuthenticationFeature { OriginalPath = httpContext.Request.Path, OriginalPathBase = httpContext.Request.PathBase }); // Give any IAuthenticationRequestHandler schemes a chance to handle the request // 主要作用是: 判断当前是否需要进行远程验证,如果是就进行远程验证 var handlers = httpContext.RequestServices.GetRequiredService <IAuthenticationHandlerProvider>(); foreach (var scheme in await Schemes.GetRequestHandlerSchemesAsync()) { if (await handlers.GetHandlerAsync(httpContext, scheme.Name) is IAuthenticationRequestHandler handler && await handler.HandleRequestAsync()) { context.Fail(); return; } } //判断请求是否拥有凭据,即有没有登录 var defaultAuthenticate = await Schemes.GetDefaultAuthenticateSchemeAsync(); if (defaultAuthenticate != null) { var result = await httpContext.AuthenticateAsync(defaultAuthenticate.Name); //result?.Principal不为空即登录成功 if (result?.Principal != null) { httpContext.User = result.Principal; // 获取当前用户的角色信息 var currentUserRoles = new List <string>(); // ids4和jwt切换 // ids4 if (Permissions.IsUseIds4) { currentUserRoles = (from item in httpContext.User.Claims where item.Type == "role" select item.Value).ToList(); } else { // jwt currentUserRoles = (from item in httpContext.User.Claims where item.Type == requirement.ClaimType select item.Value).ToList(); } var isMatchRole = false; var roleIds = (await userRoleServices.Query(d => d.IsDeleted == false && d.UserId == user.ID)).Select(d => d.RoleId.ObjToInt()).Distinct().ToList(); if (roleIds.Contains(1))//超级管理员不需要菜单验证 { isMatchRole = true; } else { var permisssionRoles = requirement.Permissions.Where(w => currentUserRoles.Contains(w.Role)); foreach (var item in permisssionRoles) { try { if (Regex.Match(questUrl, item.Url?.ObjToString().ToLower())?.Value == questUrl) { isMatchRole = true; break; } } catch (Exception) { // ignored } } } //验证权限 if (currentUserRoles.Count <= 0 || !isMatchRole) { context.Fail(); return; } var isExp = false; // ids4和jwt切换 // ids4 if (Permissions.IsUseIds4) { isExp = (httpContext.User.Claims.SingleOrDefault(s => s.Type == "exp")?.Value) != null && DateHelper.StampToDateTime(httpContext.User.Claims.SingleOrDefault(s => s.Type == "exp")?.Value) >= DateTime.Now; } else { // jwt isExp = (httpContext.User.Claims.SingleOrDefault(s => s.Type == ClaimTypes.Expiration)?.Value) != null && DateTime.Parse(httpContext.User.Claims.SingleOrDefault(s => s.Type == ClaimTypes.Expiration)?.Value) >= DateTime.Now; } if (isExp) { context.Succeed(requirement); } else { context.Fail(); return; } return; } } //判断没有登录时,是否访问登录的url,并且是Post请求,并且是form表单提交类型,否则为失败 if (!(questUrl.Equals(requirement.LoginPath.ToLower(), StringComparison.Ordinal) && (!httpContext.Request.Method.Equals("POST") || !httpContext.Request.HasFormContentType))) { context.Fail(); return; } } //context.Succeed(requirement); }