示例#1
0
        /// <summary>
        /// Get all the access requests that users have submitted to the system
        /// </summary>
        /// <param name="page"></param>
        /// <param name="quantity"></param>
        /// <param name="sort"></param>
        /// <param name="status"></param>
        public Paged <AccessRequest> GetAccessRequests(int page = 1, int quantity = 10, string sort = null,
                                                       AccessRequestStatus status = AccessRequestStatus.OnHold)
        {
            var sortArray = !string.IsNullOrWhiteSpace(sort) ? new[] { sort } : new string[0];
            var filter    = new AccessRequestFilter(page, quantity, sortArray, null, null, null, status);

            return(GetAccessRequests(filter));
        }
示例#2
0
        /// <summary>
        /// Get all the access requests that users have match the specified filter
        /// </summary>
        /// <param name="filter"></param>
        public Paged <PimsAccessRequest> Get(AccessRequestFilter filter)
        {
            this.User.ThrowIfNotAuthorized(Permissions.AdminUsers);

            var query = this.Context.PimsAccessRequests
                        .Include(a => a.User)
                        .ThenInclude(u => u.Person)
                        .ThenInclude(p => p.PimsContactMethods)
                        .Include(a => a.Role)
                        .Include(a => a.PimsAccessRequestOrganizations)
                        .ThenInclude(a => a.Organization)
                        .Include(a => a.AccessRequestStatusTypeCodeNavigation)
                        .AsNoTracking();

            var userOrganizations = this.User.GetOrganizations();

            if (userOrganizations != null && User.HasPermission(Permissions.OrganizationAdmin) && !User.HasPermission(Permissions.SystemAdmin))
            {
                query = query.Where(accessRequest => accessRequest.PimsAccessRequestOrganizations.Any(a => a.OrganizationId.HasValue && userOrganizations.Contains(a.OrganizationId.Value)));
            }

            if (!String.IsNullOrWhiteSpace(filter.Status))
            {
                query = query.Where(request => request.AccessRequestStatusTypeCode == filter.Status);
            }

            if (!string.IsNullOrWhiteSpace(filter.Role))
            {
                query = query.Where(ar => EF.Functions.Like(ar.Role.Name, $"%{filter.Role}%"));
            }

            if (!string.IsNullOrWhiteSpace(filter.Organization))
            {
                query = query.Where(ar => ar.PimsAccessRequestOrganizations.Any(a => EF.Functions.Like(a.Organization.OrganizationName, $"%{filter.Organization}%")));
            }

            if (!string.IsNullOrWhiteSpace(filter.Username))
            {
                query = query.Where(ar => EF.Functions.Like(ar.User.BusinessIdentifierValue, $"%{filter.Username}%"));
            }

            var accessRequests = query
                                 .Skip((filter.Page - 1) * filter.Quantity)
                                 .Take(filter.Quantity);

            return(new Paged <PimsAccessRequest>(accessRequests, filter.Page, filter.Quantity, query.Count()));
        }
示例#3
0
        /// <summary>
        /// Get all the access requests that users have match the specified filter
        /// </summary>
        /// <param name="filter"></param>
        public Paged <AccessRequest> GetAccessRequests(AccessRequestFilter filter)
        {
            this.User.ThrowIfNotAuthorized(Permissions.AdminUsers);

            var query = this.Context.AccessRequests
                        .Include(p => p.Agencies)
                        .ThenInclude(p => p.Agency)
                        .Include(p => p.Roles)
                        .ThenInclude(p => p.Role)
                        .Include(p => p.User)
                        .AsNoTracking();

            var userAgencies = this.User.GetAgencies();

            if (userAgencies != null && User.HasPermission(Permissions.AgencyAdmin) && !User.HasPermission(Permissions.SystemAdmin))
            {
                query = query.Where(accessRequest => accessRequest.Agencies.Any(a => userAgencies.Contains(a.AgencyId)));
            }

            query = query.Where(request => request.Status == filter.Status);

            if (!string.IsNullOrWhiteSpace(filter.Role))
            {
                query = query.Where(ar => ar.Roles.Any(r =>
                                                       EF.Functions.Like(r.Role.Name, $"%{filter.Role}%")));
            }

            if (!string.IsNullOrWhiteSpace(filter.Agency))
            {
                query = query.Where(ar => ar.Agencies.Any(a =>
                                                          EF.Functions.Like(a.Agency.Name, $"%{filter.Agency}%")));
            }

            if (!string.IsNullOrWhiteSpace(filter.SearchText))
            {
                query = query.Where(ar => EF.Functions.Like(ar.User.Username, $"%{filter.SearchText}%"));
            }

            var accessRequests = query.Skip((filter.Page - 1) * filter.Quantity).Take(filter.Quantity);

            return(new Paged <AccessRequest>(accessRequests, filter.Page, filter.Quantity, query.Count()));
        }