Exemple #1
0
 public QueryAllByRestrictionCapabilities(CrossOrganizationDataReadAccessLevel crossOrganizationAccess, IEnumerable <int> organizationIds)
 {
     //Rightsholders only have local access from a generic perspective. Queries must be custom-built
     _crossOrganizationAccess = crossOrganizationAccess == CrossOrganizationDataReadAccessLevel.RightsHolder ? CrossOrganizationDataReadAccessLevel.None : crossOrganizationAccess;
     _organizationIds         = organizationIds;
     _hasOrganization         = typeof(IOwnedByOrganization).IsAssignableFrom(typeof(T));
     _hasAccessModifier       = typeof(IHasAccessModifier).IsAssignableFrom(typeof(T));
 }
Exemple #2
0
        public static IQueryable <T> ByOrganizationDataAndPublicDataFromOtherOrganizations <T>(
            this IQueryable <T> result,
            int organizationId,
            OrganizationDataReadAccessLevel organizationAccessLevel,
            CrossOrganizationDataReadAccessLevel crossOrganizationDataReadAccessLevel)
            where T : class, IHasAccessModifier, IOwnedByOrganization
        {
            var domainQueries = new List <IDomainQuery <T> >();

            /****************/
            /***MAIN QUERY***/
            /****************/
            if (organizationAccessLevel >= OrganizationDataReadAccessLevel.Public)
            {
                if (crossOrganizationDataReadAccessLevel >= CrossOrganizationDataReadAccessLevel.Public)
                {
                    domainQueries.Add(new QueryByPublicAccessOrOrganizationId <T>(organizationId));
                }
                else
                {
                    domainQueries.Add(new QueryByOrganizationId <T>(organizationId));
                }

                //Refine to public data only for the organization in question
                if (organizationAccessLevel == OrganizationDataReadAccessLevel.Public)
                {
                    domainQueries.Add(new QueryByAccessModifier <T>(AccessModifier.Public));
                }
            }
            else
            {
                domainQueries.Add(new RejectAllResultsQuery <T>());
            }

            return(new IntersectionQuery <T>(domainQueries).Apply(result));
        }
 private void ExpectCrossLevelOrganizationAccess(
     CrossOrganizationDataReadAccessLevel crossOrganizationDataReadAccessLevel)
 {
     _authorizationContext.Setup(x => x.GetCrossOrganizationReadAccess()).Returns(crossOrganizationDataReadAccessLevel);
 }
 private static OrganizationDataQueryParameters CreateExpectedQuery(bool getPublic, CrossOrganizationDataReadAccessLevel crossOrganizationDataReadAccessLevel, OrganizationDataReadAccessLevel organizationDataReadAccess, int organizationId)
 {
     return(new OrganizationDataQueryParameters(organizationId,
                                                getPublic
             ? OrganizationDataQueryBreadth.IncludePublicDataFromOtherOrganizations
             : OrganizationDataQueryBreadth.TargetOrganization,
                                                new DataAccessLevel(crossOrganizationDataReadAccessLevel, organizationDataReadAccess)));
 }
        public void GetUnusedItSystemsByOrganization_Returns_RequestedAmount_OrderedBy_Name(int amount, bool getPublic, CrossOrganizationDataReadAccessLevel crossOrganizationDataReadAccessLevel, OrganizationDataReadAccessLevel organizationDataReadAccess)
        {
            //Arrange
            var prefix         = A <string>();
            var organizationId = A <int>();

            ExpectOrganizationalAccessLevel(organizationId, organizationDataReadAccess);
            ExpectCrossLevelOrganizationAccess(crossOrganizationDataReadAccessLevel);
            var expectedQuery = CreateExpectedQuery(getPublic, crossOrganizationDataReadAccessLevel, organizationDataReadAccess, organizationId);

            //Create double the amount of requested to check that amount is limited by requested number.
            var resultSet = CreateItSystemSequenceWithNamePrefix(amount * 2, prefix);

            ExpectGetUnusedSystemsReturns(expectedQuery, resultSet.AsQueryable());

            //Act
            var result = _sut.GetUnusedItSystemsByOrganization(organizationId, prefix, amount, getPublic);

            //Assert + requested amount returned and in the right order
            Assert.True(result.Ok);
            var itSystems = result.Value.ToList();

            Assert.Equal(amount, itSystems.Count);
            Assert.True(resultSet.OrderBy(x => x.Name).Take(amount).SequenceEqual(itSystems));
        }
Exemple #6
0
        public void GetCrossOrganizationReadAccess_Returns_Based_On_Role_And_Organization_Type(bool isGlobalAdmin, bool isRightsHolder, bool isStakeHolder, OrganizationCategory organizationCategory, CrossOrganizationDataReadAccessLevel expectedResult)
        {
            //Arrange
            ExpectUserIsGlobalAdmin(isGlobalAdmin);
            ExpectUserHasStakeHolderAccess(isStakeHolder);
            ExpectUserHasRoleInOrganizationOfType(OrganizationCategory.Municipality, organizationCategory == OrganizationCategory.Municipality);
            ExpectUserHasRoleInAnyOrganization(OrganizationRole.RightsHolderAccess, isRightsHolder);

            //Act
            var result = _sut.GetCrossOrganizationReadAccess();

            //Assert
            Assert.Equal(expectedResult, result);
        }
 private IReturnsResult <IAuthorizationContext> ExpectGetCrossLevelOrganizationAccessReturns(CrossOrganizationDataReadAccessLevel accessLevel)
 {
     return(_authorizationContext.Setup(x => x.GetCrossOrganizationReadAccess()).Returns(accessLevel));
 }
Exemple #8
0
 public DataAccessLevel(CrossOrganizationDataReadAccessLevel crossOrganizational, OrganizationDataReadAccessLevel currentOrganization)
 {
     CrossOrganizational = crossOrganizational;
     CurrentOrganization = currentOrganization;
 }