コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 /// <summary>
 /// 获取用户过滤查询
 /// </summary>
 /// <param name="input"></param>
 /// <returns></returns>
 private IQueryable <User> GetUsersFilteredQuery(IGetUsersInput input)
 {
     return(_userRepository.GetAll());
 }
コード例 #6
0
        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);
        }