protected internal IEnumerable <Claim> GetOrganizationClaims(string username)
        {
            var hasCentralAccess = _organizationUserQueryService.HasCentralAccess(username);

            if (hasCentralAccess)
            {
                yield return(new Claim(ReportingModuleClaimTypes.AccessAllOrganizations, True));
            }
            var organizationUsers = _organizationUserQueryService.GetByUsername(username).ToArray();
            var organizationRoles = new List <OrganizationRole>();
            var organizationIds   = new List <int>();

            foreach (var organizationUserViewModel in organizationUsers)
            {
                var managedOrganizationIds = _organizationQueryService.GetManagedOrganizationIds(organizationUserViewModel.Organization.Id);
                var orgIds = new[] { organizationUserViewModel.Organization.Id }.Concat(managedOrganizationIds).ToArray().Distinct().ToArray();
                organizationIds.AddRange(orgIds);
                organizationRoles.AddRange(orgIds.Select(o => new OrganizationRole {
                    Id = o, Role = organizationUserViewModel.Role
                }).ToArray());
            }
            yield return(new Claim(ReportingModuleClaimTypes.OrganizationAccess, string.Join("|", organizationIds.Distinct().ToArray())));

            var organizationRoleClaims = organizationRoles.Distinct()
                                         .OrderBy(o => o.Id)
                                         .ThenBy(o => o.Role)
                                         .Select(o => new Claim(ReportingModuleClaimTypes.OrganizationRole,
                                                                $"{o.Id}|{o.Role}")).ToArray();

            foreach (var claim in organizationRoleClaims)
            {
                yield return(claim);
            }
        }
 public SearchResult <ReportViewModel> Search(AllReportSearchTerms searchTerms)
 {
     return(_session.Query <ReportViewModel>()
            .ApplyOrganizationReferenceFilter(_userContext)
            .ApplyQuickSearch(searchTerms.QuickSearch)
            .ApplyTimestampFromSearch(searchTerms.TimestampFrom)
            .ApplyTimestampToSearch(searchTerms.TimestampTo)
            .ApplyReportingPeriodStartDateFromSearch(searchTerms.ReportingPeriodStartDateFrom)
            .ApplyReportingPeriodEndDateToSearch(searchTerms.ReportingPeriodEndDateTo)
            .ApplyReportStatusSearch(searchTerms.Status)
            .ApplyOrganizationTypeSearch(searchTerms.OrganizationalType)
            .ApplyReportingFrequencySearch(searchTerms.ReportingFrequency)
            .ApplyReportingTermSearch(searchTerms.ReportingTerm)
            .ApplyMyReportSearch(searchTerms.MyReports ? _organizationUserQueryService.GetByUsername(UserContext.GetLoggedInUsername()).Select(s => s.Organization.Id) : new int[0])
            .ApplyParentSearch(searchTerms.Parent, searchTerms.Parent.HasValue ?
                               _organizationQueryService.GetManagedOrganizationIds(searchTerms.Parent.Value)
             : new int[0])
            .ApplyOrganizationSearch(searchTerms.Organization)
            .OrderByDescending(o => o.ReportingPeriod.StartDate)
            .ThenBy(o => o.Organization.OrganizationType)
            .ThenBy(o => o.Organization.Description)
            .FetchSimpleSearchResult(searchTerms.PagingData ?? new PagingData(1, DefaultPageSize, 0)));
 }
예제 #3
0
        protected internal IEnumerable <Claim> GetOrganizationClaims(string username)
        {
            var organizationUsers = _organizationUserQueryService.GetByUsername(username).ToArray();

            var orgIds = organizationUsers.Select(o => o.Organization.Id).ToArray();

            yield return(new Claim(ReportingModuleClaimTypes.OrganizationAccess, string.Join("|", orgIds)));

            var organizationRoleClaims = organizationUsers.Select(o => new Claim(ReportingModuleClaimTypes.OrganizationRole,
                                                                                 $"{o.Organization.Id}|{o.Role}")).ToArray();

            foreach (var claim in organizationRoleClaims)
            {
                yield return(claim);
            }
        }