public void VerifyThatExceptionIsThrownWhenSetAccessRightIsNotValid()
        {
            var participantPermission =
                new ParticipantPermission(Guid.NewGuid(), 1)
            {
                ObjectClass = ClassKind.DiagramCanvas,
                AccessRight = ParticipantAccessRightKind.MODIFY_IF_OWNER
            };

            this.sideEffect =
                new ParticipantPermissionSideEffect()
            {
                AccessRightKindValidationService =
                    this.denyingAccessRightKindValidationService.Object
            };

            Assert.Throws <InvalidOperationException>(
                () => this.sideEffect.BeforeCreate(
                    participantPermission,
                    null,
                    this.npgsqlTransaction,
                    "partition",
                    this.securityContext.Object));

            Assert.Throws <InvalidOperationException>(
                () => this.sideEffect.AfterUpdate(
                    participantPermission,
                    null,
                    null,
                    this.npgsqlTransaction,
                    "partition",
                    this.securityContext.Object));
        }
        /// <summary>
        /// Find and create missing <see cref="ParticipantPermission"/>
        /// </summary>
        /// <param name="participantRole">
        /// The <see cref="ParticipantRole"/> to find and create <see cref="ParticipantPermission"/>s for.
        /// </param>
        /// <param name="transaction">
        /// The current transaction to the database.
        /// </param>
        private void FindAndCreateMissingParticipantPermissions(ParticipantRole participantRole, NpgsqlTransaction transaction)
        {
            var participantPermissions = this.ParticipantPermissionService.GetShallow(
                transaction,
                TopContainer,
                participantRole.ParticipantPermission,
                new RequestSecurityContext {
                ContainerReadAllowed = true
            }).OfType <ParticipantPermission>().ToList();

            foreach (var classKind in Enum.GetValues(typeof(ClassKind)).Cast <ClassKind>())
            {
                var defaultPermission = this.DefaultPermissionProvider.GetDefaultParticipantPermission(classKind);

                if (defaultPermission == ParticipantAccessRightKind.NONE)
                {
                    var participantPermission = participantPermissions.Find(x => x.ObjectClass == classKind);

                    if (participantPermission == null)
                    {
                        Logger.Debug("Create ParticipantPermission for class {0} for ParticipantRole {1}", classKind, participantRole.Iid);

                        var permission = new ParticipantPermission(Guid.NewGuid(), 0)
                        {
                            ObjectClass = classKind,
                            AccessRight = defaultPermission
                        };

                        participantRole.ParticipantPermission.Add(permission.Iid);
                        this.ParticipantPermissionService.CreateConcept(transaction, TopContainer, permission, participantRole);
                    }
                }
            }
        }
        public void VerifyThatSideEffectPassedWhenSetAccessRightIsValid()
        {
            var participantPermission =
                new ParticipantPermission(Guid.NewGuid(), 1)
            {
                ObjectClass = ClassKind.Book,
                AccessRight = ParticipantAccessRightKind.MODIFY_IF_OWNER
            };

            this.sideEffect =
                new ParticipantPermissionSideEffect()
            {
                AccessRightKindValidationService =
                    this.permissiveAccessRightKindValidationService.Object
            };
            this.sideEffect.BeforeCreate(
                participantPermission,
                null,
                this.npgsqlTransaction,
                "partition",
                this.securityContext.Object);

            this.sideEffect.AfterUpdate(
                participantPermission,
                null,
                null,
                this.npgsqlTransaction,
                "partition",
                this.securityContext.Object);

            this.permissiveAccessRightKindValidationService.Verify(
                x => x.IsParticipantPermissionValid(It.IsAny <ParticipantPermission>()),
                Times.Exactly(2));
        }
Beispiel #4
0
        public void Verify_that_ParticipantPermission_is_included_when_classkind_version_eaual_or_lower_than_requested_model_version()
        {
            var participantPermission = new ParticipantPermission(Guid.NewGuid(), 1);

            participantPermission.ObjectClass = ClassKind.ActionItem;

            Assert.That(this.thingConverterExtensions.AssertSerialization(participantPermission,
                                                                          this.metaDataProvider, new Version(1, 1, 0)),
                        Is.True);
        }
Beispiel #5
0
        public void SetUp()
        {
            this.participantRoleRuleChecker = new ParticipantRoleRuleChecker();

            this.participantRole = new ParticipantRole();

            this.participantPermission = new ParticipantPermission
            {
                Iid         = Guid.Parse("450ef9fb-fc60-4dab-a203-4340f0181102"),
                ObjectClass = ClassKind.Person
            };

            this.participantRole.ParticipantPermission.Add(this.participantPermission);
        }
Beispiel #6
0
        public void VerifyThatRoleAndPermissionAreFilteredCorrectly()
        {
            var personRole      = new PersonRole(Guid.NewGuid(), 0);
            var participantRole = new ParticipantRole(Guid.NewGuid(), 0);

            this.personPermission1             = new PersonPermission(Guid.NewGuid(), 0);
            this.personPermission1.ObjectClass = ClassKind.ActionItem;
            this.personPermission2             = new PersonPermission(Guid.NewGuid(), 0);
            this.personPermission2.ObjectClass = ClassKind.SiteDirectory;
            this.personPermission3             = new PersonPermission(Guid.NewGuid(), 0);
            this.personPermission3.ObjectClass = ClassKind.ActualFiniteState;

            this.participantPermission1             = new ParticipantPermission(Guid.NewGuid(), 0);
            this.participantPermission1.ObjectClass = ClassKind.DiagramCanvas;
            this.participantPermission2             = new ParticipantPermission(Guid.NewGuid(), 0);
            this.participantPermission2.ObjectClass = ClassKind.EngineeringModel;
            this.participantPermission3             = new ParticipantPermission(Guid.NewGuid(), 0);
            this.participantPermission3.ObjectClass = ClassKind.ElementDefinition;

            personRole.PersonPermission.Add(this.personPermission3.Iid);
            personRole.PersonPermission.Add(this.personPermission2.Iid);
            personRole.PersonPermission.Add(this.personPermission1.Iid);

            participantRole.ParticipantPermission.Add(this.participantPermission1.Iid);
            participantRole.ParticipantPermission.Add(this.participantPermission2.Iid);
            participantRole.ParticipantPermission.Add(this.participantPermission3.Iid);

            var input = new List <Thing>
            {
                personRole,
                participantRole,
                this.personPermission1,
                this.personPermission2,
                this.personPermission3,
                this.participantPermission1,
                this.participantPermission2,
                this.participantPermission3
            };

            var result = this.service.FilterOutPermissions(
                input,
                new Version(1, 0)).ToArray();

            Assert.IsFalse(result.Contains(this.personPermission1));
            Assert.IsFalse(result.Contains(this.participantPermission1));
            Assert.AreEqual(personRole.PersonPermission.Count, 2);
            Assert.AreEqual(participantRole.ParticipantPermission.Count, 2);
        }
        /// <summary>
        /// Serialize the <see cref="ParticipantPermission"/>
        /// </summary>
        /// <param name="participantPermission">The <see cref="ParticipantPermission"/> to serialize</param>
        /// <returns>The <see cref="JObject"/></returns>
        private JObject Serialize(ParticipantPermission participantPermission)
        {
            var jsonObject = new JObject();

            jsonObject.Add("accessRight", this.PropertySerializerMap["accessRight"](Enum.GetName(typeof(CDP4Common.CommonData.ParticipantAccessRightKind), participantPermission.AccessRight)));
            jsonObject.Add("classKind", this.PropertySerializerMap["classKind"](Enum.GetName(typeof(CDP4Common.CommonData.ClassKind), participantPermission.ClassKind)));
            jsonObject.Add("excludedDomain", this.PropertySerializerMap["excludedDomain"](participantPermission.ExcludedDomain.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("excludedPerson", this.PropertySerializerMap["excludedPerson"](participantPermission.ExcludedPerson.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("iid", this.PropertySerializerMap["iid"](participantPermission.Iid));
            jsonObject.Add("isDeprecated", this.PropertySerializerMap["isDeprecated"](participantPermission.IsDeprecated));
            jsonObject.Add("modifiedOn", this.PropertySerializerMap["modifiedOn"](participantPermission.ModifiedOn));
            jsonObject.Add("objectClass", this.PropertySerializerMap["objectClass"](Enum.GetName(typeof(CDP4Common.CommonData.ClassKind), participantPermission.ObjectClass)));
            jsonObject.Add("revisionNumber", this.PropertySerializerMap["revisionNumber"](participantPermission.RevisionNumber));
            jsonObject.Add("thingPreference", this.PropertySerializerMap["thingPreference"](participantPermission.ThingPreference));
            return(jsonObject);
        }
        public void TestRow()
        {
            var permission = new ParticipantPermission(Guid.NewGuid(), this.cache, this.uri)
            {
                ObjectClass = ClassKind.Alias,
                AccessRight = ParticipantAccessRightKind.MODIFY
            };

            this.role.ParticipantPermission.Add(permission);
            this.cache.TryAdd(new CacheKey(permission.Iid, null), new Lazy <Thing>(() => permission));

            var row = new ParticipantPermissionRowViewModel(permission, this.session.Object, null);

            Assert.AreEqual(row.ObjectClass, permission.ObjectClass);
            Assert.AreEqual(row.AccessRight, permission.AccessRight);

            Assert.That(row.Name, Is.Not.Null.Or.Empty);
            Assert.IsNotNull(row.ShortName);
        }
Beispiel #9
0
        public void VerifyThatModifyIfOwnerCanBeSetOnlyForOwnedObjectClass()
        {
            var participantPermission1 =
                new ParticipantPermission(Guid.NewGuid(), 1)
            {
                ObjectClass = ClassKind.DiagramCanvas,
                AccessRight = ParticipantAccessRightKind
                              .MODIFY_IF_OWNER
            };

            var participantPermission2 =
                new ParticipantPermission(Guid.NewGuid(), 1)
            {
                ObjectClass = ClassKind.Book,
                AccessRight = ParticipantAccessRightKind
                              .MODIFY_IF_OWNER
            };

            Assert.False(this.service.IsParticipantPermissionValid(participantPermission1));
            Assert.True(this.service.IsParticipantPermissionValid(participantPermission2));
        }
Beispiel #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ParticipantPermissionRowViewModel"/> class.
 /// </summary>
 /// <param name="permission">The <see cref="ParticipantPermission"/> that is represented by the current row</param>
 /// <param name="session">The session</param>
 /// <param name="containerViewModel">The container <see cref="IViewModelBase{T}"/></param>
 public ParticipantPermissionRowViewModel(ParticipantPermission permission, ISession session, IViewModelBase <Thing> containerViewModel)
     : base(permission, session, containerViewModel)
 {
     this.UpdatePermission();
     this.WhenAnyValue(x => x.AccessRight).Subscribe(_ => this.ExecuteUpdatePermission());
 }
Beispiel #11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ParticipantPermissionRowViewModel"/> class.
 /// </summary>
 /// <param name="permission">The <see cref="ParticipantPermission"/> that is represented by the current row</param>
 /// <param name="session">The session</param>
 /// <param name="containerViewModel">The container <see cref="IViewModelBase{T}"/></param>
 public ParticipantPermissionRowViewModel(ParticipantPermission permission, ISession session,
                                          IViewModelBase <Thing> containerViewModel)
     : base(permission, session, containerViewModel)
 {
     this.UpdateIsDeprecatedDerivedFromContainerRowViewModel();
 }
Beispiel #12
0
        public void Setup()
        {
            this.npgsqlTransaction = null;
            this.metaInfoProvider  = new MetaInfoProvider
            {
                DomainOfExpertiseMetaInfo           = new DomainOfExpertiseMetaInfo(),
                IterationSetupMetaInfo              = new IterationSetupMetaInfo(),
                SiteDirectoryDataAnnotationMetaInfo = new SiteDirectoryDataAnnotationMetaInfo(),
                ElementDefinitionMetaInfo           = new ElementDefinitionMetaInfo(),
                ElementUsageMetaInfo      = new ElementUsageMetaInfo(),
                BookMetaInfo              = new BookMetaInfo(),
                ActionItemMetaInfo        = new ActionItemMetaInfo(),
                SiteDirectoryMetaInfo     = new SiteDirectoryMetaInfo(),
                ActualFiniteStateMetaInfo = new ActualFiniteStateMetaInfo(),
                DiagramCanvasMetaInfo     = new DiagramCanvasMetaInfo(),
                EngineeringModelMetaInfo  = new EngineeringModelMetaInfo(),
            };

            this.personRoles = new List <PersonRole>
            {
                new PersonRole
                {
                    Iid              = Guid.NewGuid(),
                    RevisionNumber   = 1,
                    PersonPermission =
                        new List <Guid>
                    {
                        this
                        .personPermission1id,
                        this
                        .personPermission2id,
                        this
                        .personPermission3id
                    }
                }
            };
            this.participantRoles = new List <ParticipantRole>
            {
                new ParticipantRole
                {
                    Iid                   = Guid.NewGuid(),
                    RevisionNumber        = 1,
                    ParticipantPermission =
                        new List <Guid>
                    {
                        this
                        .participantPermission1id,
                        this
                        .participantPermission2id,
                        this
                        .participantPermission3id
                    }
                }
            };



            this.transactionManager = new Mock <ICdp4TransactionManager>();
            NpgsqlConnection connection = null;

            this.transactionManager.Setup(x => x.SetupTransaction(ref connection, null))
            .Returns(this.npgsqlTransaction);

            this.participantPermission1             = new ParticipantPermission(this.participantPermission1id, 1);
            this.participantPermission1.ObjectClass = ClassKind.DomainOfExpertise;
            this.participantPermission2             = new ParticipantPermission(this.participantPermission2id, 1);
            this.participantPermission2.ObjectClass = ClassKind.IterationSetup;
            this.participantPermission3             = new ParticipantPermission(this.participantPermission3id, 1);
            this.participantPermission3.ObjectClass = ClassKind.SiteDirectoryDataAnnotation;
            this.participantPermissionDao           = new Mock <IParticipantPermissionDao>();
            this.participantPermissionDao.Setup(x => x.Read(this.npgsqlTransaction, SiteDirectoryData, It.IsAny <IEnumerable <Guid> >(), true))
            .Returns(
                new List <ParticipantPermission>
            {
                this.participantPermission1,
                this.participantPermission2,
                this.participantPermission3
            });

            this.personPermission1             = new PersonPermission(this.personPermission1id, 1);
            this.personPermission1.ObjectClass = ClassKind.DomainOfExpertise;
            this.personPermission2             = new PersonPermission(this.personPermission2id, 1);
            this.personPermission2.ObjectClass = ClassKind.IterationSetup;
            this.personPermission3             = new PersonPermission(this.personPermission3id, 1);
            this.personPermission3.ObjectClass = ClassKind.SiteDirectoryDataAnnotation;
            this.personPermissionDao           = new Mock <IPersonPermissionDao>();
            this.personPermissionDao.Setup(x => x.Read(this.npgsqlTransaction, SiteDirectoryData, It.IsAny <IEnumerable <Guid> >(), true)).Returns(
                new List <PersonPermission> {
                this.personPermission1, this.personPermission2, this.personPermission3
            });

            this.service = new PermissionInstanceFilterService
            {
                MetadataProvider         = this.metaInfoProvider,
                TransactionManager       = this.transactionManager.Object,
                ParticipantPermissionDao = this.participantPermissionDao.Object,
                PersonPermissionDao      = this.personPermissionDao.Object
            };
        }
 /// <summary>
 /// Add an Participant Permission row view model to the list of <see cref="ParticipantPermission"/>
 /// </summary>
 /// <param name="participantPermission">
 /// The <see cref="ParticipantPermission"/> that is to be added
 /// </param>
 private ParticipantPermissionRowViewModel AddParticipantPermissionRowViewModel(ParticipantPermission participantPermission)
 {
     return(new ParticipantPermissionRowViewModel(participantPermission, this.Session, this));
 }