private IQueryable <User> GetUsersFilteredQuery(IGetUsersInput input) { var query = UserManager.Users .WhereIf(input.Role.HasValue, u => u.Roles.Any(r => r.RoleId == input.Role.Value)) .WhereIf(input.OnlyLockedUsers, u => u.LockoutEndDateUtc.HasValue && u.LockoutEndDateUtc.Value > DateTime.UtcNow) .WhereIf( !input.Filter.IsNullOrWhiteSpace(), u => u.Name.Contains(input.Filter) || u.Surname.Contains(input.Filter) || u.UserName.Contains(input.Filter) || u.EmailAddress.Contains(input.Filter) ); if (!input.Permission.IsNullOrWhiteSpace()) { query = from user in query join ur in _userRoleRepository.GetAll() on user.Id equals ur.UserId into urJoined from ur in urJoined.DefaultIfEmpty() join up in _userPermissionRepository.GetAll() on new { UserId = user.Id, Name = input.Permission } equals new { up.UserId, up.Name } into upJoined from up in upJoined.DefaultIfEmpty() join rp in _rolePermissionRepository.GetAll() on new { RoleId = ur == null ? 0 : ur.RoleId, Name = input.Permission } equals new { rp.RoleId, rp.Name } into rpJoined from rp in rpJoined.DefaultIfEmpty() where up != null && up.IsGranted || up == null && rp != null group user by user into userGrouped select userGrouped.Key; } return(query); }
private IQueryable <User> GetUsersTeamFilteredQuery(IGetUsersInput input, int teamId, bool isSelected) { var teamMemberQuery = _teamMemberRepository.GetAll() .Where(e => e.TeamId == teamId) .Select(member => member.UserId); var query = UserManager.Users .WhereIf(!isSelected, u => !teamMemberQuery.Contains(u.Id)) .WhereIf(isSelected, u => teamMemberQuery.Contains(u.Id)); return(query); }
private IQueryable <User> GetUsersTeamByReportingTeamMemberQuery(IGetUsersInput input, int teamId, bool isSelected, int?reportingTeamMemberId) { var teamMemberQuery = _teamMemberRepository.GetAll() .Include(e => e.SysRefFk) .Where(e => e.TeamId == teamId) .WhereIf(reportingTeamMemberId != null, e => e.ReportingTeamMemberId == reportingTeamMemberId) .Select(member => member.UserId); var query = UserManager.Users .WhereIf(!isSelected, u => !teamMemberQuery.Contains(u.Id)) .WhereIf(isSelected, u => teamMemberQuery.Contains(u.Id)); return(query); }
private IQueryable <User> GetUsersFilteredQuery(IGetUsersInput input) { var query = UserManager.Users .WhereIf(input.Role.HasValue, u => u.Roles.Any(r => r.RoleId == input.Role.Value)) .WhereIf(input.OnlyLockedUsers, u => u.LockoutEndDateUtc.HasValue && u.LockoutEndDateUtc.Value > DateTime.UtcNow) .WhereIf( !input.Filter.IsNullOrWhiteSpace(), u => u.Name.Contains(input.Filter) || u.Surname.Contains(input.Filter) || u.UserName.Contains(input.Filter) || u.EmailAddress.Contains(input.Filter) ); if (input.Permissions != null && input.Permissions.Any(p => !p.IsNullOrWhiteSpace())) { var staticRoleNames = _roleManagementConfig.StaticRoles.Where( r => r.GrantAllPermissionsByDefault && r.Side == AbpSession.MultiTenancySide ).Select(r => r.RoleName).ToList(); input.Permissions = input.Permissions.Where(p => !string.IsNullOrEmpty(p)).ToList(); var userIds = from user in query join ur in _userRoleRepository.GetAll() on user.Id equals ur.UserId into urJoined from ur in urJoined.DefaultIfEmpty() join urr in _roleRepository.GetAll() on ur.RoleId equals urr.Id into urrJoined from urr in urrJoined.DefaultIfEmpty() join up in _userPermissionRepository.GetAll() .Where(userPermission => input.Permissions.Contains(userPermission.Name)) on user.Id equals up.UserId into upJoined from up in upJoined.DefaultIfEmpty() join rp in _rolePermissionRepository.GetAll() .Where(rolePermission => input.Permissions.Contains(rolePermission.Name)) on new { RoleId = ur == null ? 0 : ur.RoleId } equals new { rp.RoleId } into rpJoined from rp in rpJoined.DefaultIfEmpty() where (up != null && up.IsGranted) || (up == null && rp != null && rp.IsGranted) || (up == null && rp == null && staticRoleNames.Contains(urr.Name)) group user by user.Id into userGrouped select userGrouped.Key; query = UserManager.Users.Where(e => userIds.Contains(e.Id)); } return(query); }
/// <summary> /// 获取用户过滤查询 /// </summary> /// <param name="input"></param> /// <returns></returns> private IQueryable <User> GetUsersFilteredQuery(IGetUsersInput input) { return(_userRepository.GetAll()); }
private IQueryable <User> GetUsersFilteredQuery(IGetUsersInput input) { var tenantInfo = TenantManager.GetTenantInfo().Result; var currentUser = _userManager.GetUserByIdAsync(AbpSession.GetUserId()).Result; var currentRoles = _userManager.GetRolesAsync(currentUser).Result; var allRoles = _roleManager.Roles.ToList(); var bestLevel = 0; var roleHierarchy = StaticRoleNames.Tenants.RoleHierarchy.Where(r => r.TenantType == tenantInfo.Tenant.TenantType); // Get this user's highest role foreach (var role in currentRoles) { var roleLevel = roleHierarchy.Where(r => r.RoleName == role).Select(r => r.Level).FirstOrDefault(); bestLevel = (roleLevel > bestLevel) ? roleLevel : bestLevel; } // Get higher roles var higherRoles = roleHierarchy.Where(r => r.Level > bestLevel).Select(r => r.RoleName).ToList(); // Get a list of all users in roles higher than that role List <User> usersToExclude = new List <User>(); foreach (var role in higherRoles) { var users = _userManager.GetUsersInRoleAsync(role).Result; usersToExclude.AddRange(users); } List <long> userIdsToExclude = usersToExclude.Select(u => u.Id).ToList(); var query = UserManager.Users .Where(u => !userIdsToExclude.Contains(u.Id)) .WhereIf(input.Role.HasValue, u => u.Roles.Any(r => r.RoleId == input.Role.Value)) .WhereIf(input.OnlyLockedUsers, u => u.LockoutEndDateUtc.HasValue && u.LockoutEndDateUtc.Value > DateTime.UtcNow) .WhereIf( !input.Filter.IsNullOrWhiteSpace(), u => u.Name.Contains(input.Filter) || u.Surname.Contains(input.Filter) || u.UserName.Contains(input.Filter) || u.EmailAddress.Contains(input.Filter) ); if (input.Permissions != null && input.Permissions.Any(p => !p.IsNullOrWhiteSpace())) { var staticRoleNames = _roleManagementConfig.StaticRoles.Where( r => r.GrantAllPermissionsByDefault && r.Side == AbpSession.MultiTenancySide ).Select(r => r.RoleName).ToList(); input.Permissions = input.Permissions.Where(p => !string.IsNullOrEmpty(p)).ToList(); query = from user in query join ur in _userRoleRepository.GetAll() on user.Id equals ur.UserId into urJoined from ur in urJoined.DefaultIfEmpty() join urr in _roleRepository.GetAll() on ur.RoleId equals urr.Id into urrJoined from urr in urrJoined.DefaultIfEmpty() join up in _userPermissionRepository.GetAll().Where(userPermission => input.Permissions.Contains(userPermission.Name)) on user.Id equals up.UserId into upJoined from up in upJoined.DefaultIfEmpty() join rp in _rolePermissionRepository.GetAll().Where(rolePermission => input.Permissions.Contains(rolePermission.Name)) on new { RoleId = ur == null ? 0 : ur.RoleId } equals new { rp.RoleId } into rpJoined from rp in rpJoined.DefaultIfEmpty() where (up != null && up.IsGranted) || (up == null && rp != null && rp.IsGranted) || (up == null && rp == null && staticRoleNames.Contains(urr.Name)) group user by user into userGrouped select userGrouped.Key; } return(query); }