public void TestRevokePermission_MultiplePermissionsExist()
        {
            var grantor = new Principal
            {
                PrincipalId = 1,
            };
            var grantee = new Principal
            {
                PrincipalId = 2
            };
            var permission = new CAM.Data.Permission
            {
                PermissionId   = CAM.Data.Permission.EditOffice.Id,
                PermissionName = CAM.Data.Permission.EditOffice.Value
            };
            var resourceType = ResourceType.Program;
            var resource     = new Resource
            {
                ResourceId        = 8,
                ForeignResourceId = 10,
                ResourceTypeId    = resourceType.Id,
            };
            var foreignResourceCache  = new ForeignResourceCache(resource.ForeignResourceId, resource.ResourceId, resource.ResourceTypeId, null, null, null);
            var permissionAssignment1 = new PermissionAssignment
            {
                PrincipalId  = grantee.PrincipalId,
                PermissionId = permission.PermissionId,
                ResourceId   = resource.ResourceId,
                IsAllowed    = false
            };
            var permissionAssignment2 = new PermissionAssignment
            {
                PrincipalId  = grantee.PrincipalId,
                PermissionId = permission.PermissionId,
                ResourceId   = resource.ResourceId,
                IsAllowed    = false
            };

            context.Principals.Add(grantor);
            context.Principals.Add(grantee);
            context.Permissions.Add(permission);
            context.Resources.Add(resource);
            context.PermissionAssignments.Add(permissionAssignment1);
            context.PermissionAssignments.Add(permissionAssignment2);
            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);

            var revokedPermission = new RevokedPermission(grantee.PrincipalId, permission.PermissionId, resource.ForeignResourceId, resourceType.Value, grantor.PrincipalId);

            Func <Task> revokeAction = async() =>
            {
                await service.RevokePermissionAsync(revokedPermission);
            };

            service.Invoking(x => x.RevokePermission(revokedPermission)).ShouldThrow <NotSupportedException>()
            .WithMessage("There should not be more than one permission assignment to set is allowed true.");
            revokeAction.ShouldThrow <NotSupportedException>()
            .WithMessage("There should not be more than one permission assignment to set is allowed true.");
        }
        public void TestToString()
        {
            var granteePrincipalId = 1;
            var grantorPrincipalId = 2;
            var permissionId       = 3;
            var foreignResourceId  = 4;
            var resourceType       = ResourceType.Program;

            var grantedPermission = new RevokedPermission(granteePrincipalId, permissionId, foreignResourceId, resourceType.Value, grantorPrincipalId);

            Assert.IsNotNull(grantedPermission.ToString());
        }
        public void TestGetResourceType()
        {
            var granteePrincipalId = 1;
            var grantorPrincipalId = 2;
            var permissionId       = 3;
            var foreignResourceId  = 4;
            var resourceType       = ResourceType.Program;

            var grantedPermission = new RevokedPermission(granteePrincipalId, permissionId, foreignResourceId, resourceType.Value, grantorPrincipalId);

            Assert.AreEqual(resourceType, grantedPermission.GetResourceType());
        }
        public void TestConstructor()
        {
            var granteePrincipalId = 1;
            var grantorPrincipalId = 2;
            var permissionId       = 3;
            var foreignResourceId  = 4;
            var resourceType       = ResourceType.Program.Value;

            var grantedPermission = new RevokedPermission(granteePrincipalId, permissionId, foreignResourceId, resourceType, grantorPrincipalId);

            Assert.IsNotNull(grantedPermission.Audit);
            Assert.IsFalse(grantedPermission.IsAllowed);
            Assert.AreEqual(granteePrincipalId, grantedPermission.GranteePrincipalId);
            Assert.AreEqual(grantorPrincipalId, grantedPermission.Audit.UserId);
            Assert.AreEqual(permissionId, grantedPermission.PermissionId);
            Assert.AreEqual(foreignResourceId, grantedPermission.ForeignResourceId);
            Assert.AreEqual(resourceType, grantedPermission.ResourceTypeAsString);
            DateTimeOffset.Now.Should().BeCloseTo(grantedPermission.Audit.Date, 2000);
        }
        public void TestRevokePermission_ResourceDoesNotExist()
        {
            var grantor = new Principal
            {
                PrincipalId = 1,
            };
            var grantee = new Principal
            {
                PrincipalId = 2
            };
            var permission = new CAM.Data.Permission
            {
                PermissionId   = CAM.Data.Permission.EditOffice.Id,
                PermissionName = CAM.Data.Permission.EditOffice.Value
            };
            var resourceType = ResourceType.Program;

            context.Principals.Add(grantor);
            context.Principals.Add(grantee);
            context.Permissions.Add(permission);
            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(default(ForeignResourceCache));
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(default(ForeignResourceCache));
            var revokedPermission = new RevokedPermission(grantee.PrincipalId, permission.PermissionId, 0, resourceType.Value, grantor.PrincipalId);
            //invoking async
            Func <Task> revokeAction = async() =>
            {
                await service.RevokePermissionAsync(revokedPermission);
            };

            service.Invoking(x => x.RevokePermission(revokedPermission)).ShouldThrow <ModelNotFoundException>()
            .WithMessage(String.Format("The foreign resource with id [{0}] and resource type [{1}] does not exist in CAM.",
                                       revokedPermission.ForeignResourceId,
                                       revokedPermission.ResourceTypeAsString));

            revokeAction.ShouldThrow <ModelNotFoundException>()
            .WithMessage(String.Format("The foreign resource with id [{0}] and resource type [{1}] does not exist in CAM.",
                                       revokedPermission.ForeignResourceId,
                                       revokedPermission.ResourceTypeAsString));
        }
        public void TestRevokePermission_GrantorDoesNotExist()
        {
            var grantee = new Principal
            {
                PrincipalId = 1,
            };
            var permission = new CAM.Data.Permission
            {
                PermissionId   = CAM.Data.Permission.EditOffice.Id,
                PermissionName = CAM.Data.Permission.EditOffice.Value
            };
            var resourceType = ResourceType.Program;
            var resource     = new Resource
            {
                ResourceId        = 8,
                ForeignResourceId = 10,
                ResourceTypeId    = resourceType.Id,
            };
            var foreignResourceCache = new ForeignResourceCache(resource.ForeignResourceId, resource.ResourceId, resource.ResourceTypeId, null, null, null);

            context.Principals.Add(grantee);
            context.Permissions.Add(permission);
            context.Resources.Add(resource);
            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);
            var revokedPermission = new RevokedPermission(grantee.PrincipalId, permission.PermissionId, resource.ForeignResourceId, resourceType.Value, 0);

            //invoking async
            Func <Task> revokeAction = async() =>
            {
                await service.RevokePermissionAsync(revokedPermission);
            };

            service.Invoking(x => x.RevokePermission(revokedPermission)).ShouldThrow <ModelNotFoundException>()
            .WithMessage(String.Format("The user with id [{0}] granting the permission could not be found.", revokedPermission.Audit.UserId));

            revokeAction.ShouldThrow <ModelNotFoundException>()
            .WithMessage(String.Format("The user with id [{0}] granting the permission could not be found.", revokedPermission.Audit.UserId));
        }
        public void TestRevokePermission_PermissionDoesNotExist()
        {
            var grantor = new Principal
            {
                PrincipalId = 1,
            };
            var grantee = new Principal
            {
                PrincipalId = 2
            };
            var resourceType = ResourceType.Program;
            var resource     = new Resource
            {
                ResourceId        = 8,
                ForeignResourceId = 10,
                ResourceTypeId    = resourceType.Id,
            };
            var foreignResourceCache = new ForeignResourceCache(resource.ForeignResourceId, resource.ResourceId, resource.ResourceTypeId, null, null, null);

            context.Principals.Add(grantor);
            context.Principals.Add(grantee);
            context.Resources.Add(resource);
            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);
            var revokedPermission = new RevokedPermission(grantee.PrincipalId, 0, resource.ForeignResourceId, resourceType.Value, grantor.PrincipalId);
            //invoking async
            Func <Task> revokeAction = async() =>
            {
                await service.RevokePermissionAsync(revokedPermission);
            };

            service.Invoking(x => x.RevokePermission(revokedPermission)).ShouldThrow <ModelNotFoundException>()
            .WithMessage(String.Format("The permission with id [{0}] was not found.", revokedPermission.PermissionId));

            revokeAction.ShouldThrow <ModelNotFoundException>()
            .WithMessage(String.Format("The permission with id [{0}] was not found.", revokedPermission.PermissionId));
        }
Exemple #8
0
 /// <summary>
 /// Revoke a permission explicity from a user.
 /// </summary>
 /// <param name="revokedPermission">The revoked permission.</param>
 public Task RevokePermissionAsync(RevokedPermission revokedPermission)
 {
     return(HandleAsync(revokedPermission));
 }
Exemple #9
0
 /// <summary>
 /// Revoke a permission explicity from a user.
 /// </summary>
 /// <param name="revokedPermission">The revoked permission.</param>
 public void RevokePermission(RevokedPermission revokedPermission)
 {
     Handle(revokedPermission);
 }
        public async Task TestRevokePermission_PermissionIsAlreadyGrantedButAllowed()
        {
            var grantor = new Principal
            {
                PrincipalId = 1,
            };
            var grantee = new Principal
            {
                PrincipalId = 2
            };
            var permission = new CAM.Data.Permission
            {
                PermissionId   = CAM.Data.Permission.EditOffice.Id,
                PermissionName = CAM.Data.Permission.EditOffice.Value
            };
            var resourceType = ResourceType.Program;
            var resource     = new Resource
            {
                ResourceId        = 8,
                ForeignResourceId = 10,
                ResourceTypeId    = resourceType.Id,
            };
            var foreignResourceCache = new ForeignResourceCache(resource.ForeignResourceId, resource.ResourceId, resource.ResourceTypeId, null, null, null);
            var permissionAssignment = new PermissionAssignment
            {
                PrincipalId  = grantee.PrincipalId,
                PermissionId = permission.PermissionId,
                ResourceId   = resource.ResourceId,
                IsAllowed    = true
            };

            context.SetupActions.Add(() =>
            {
                context.Principals.Add(grantor);
                context.Principals.Add(grantee);
                context.Permissions.Add(permission);
                context.Resources.Add(resource);
                context.PermissionAssignments.Add(permissionAssignment);
                permissionAssignment.IsAllowed = true;
                Assert.AreEqual(1, context.PermissionAssignments.Count());
            });

            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);
            resourceService.Setup(x => x.GetResourcePermissions(It.IsAny <string>(), It.IsAny <int?>())).Returns(GetAvailablePermissionsList(permission));
            resourceService.Setup(x => x.GetResourcePermissionsAsync(It.IsAny <string>(), It.IsAny <int?>())).ReturnsAsync(GetAvailablePermissionsList(permission));

            Action tester = () =>
            {
                Assert.AreEqual(1, context.PermissionAssignments.Count());
                Assert.IsFalse(context.PermissionAssignments.First().IsAllowed);
            };

            context.Revert();
            var revokedPermission = new RevokedPermission(grantee.PrincipalId, permission.PermissionId, resource.ForeignResourceId, resourceType.Value, grantor.PrincipalId);

            service.RevokePermission(revokedPermission);

            context.Revert();
            await service.RevokePermissionAsync(revokedPermission);

            tester();
        }
        public async Task TestRevokePermission_PrincipalIsNotUserAccount()
        {
            var grantor = new Principal
            {
                PrincipalId = 1,
            };
            var grantee = new Principal
            {
                PrincipalId = 2
            };
            var permission = new CAM.Data.Permission
            {
                PermissionId   = CAM.Data.Permission.EditOffice.Id,
                PermissionName = CAM.Data.Permission.EditOffice.Value
            };
            var resourceType = ResourceType.Program;
            var resource     = new Resource
            {
                ResourceId        = 8,
                ForeignResourceId = 10,
                ResourceTypeId    = resourceType.Id,
            };
            var foreignResourceCache = new ForeignResourceCache(resource.ForeignResourceId, resource.ResourceId, resource.ResourceTypeId, null, null, null);

            context.SetupActions.Add(() =>
            {
                context.Principals.Add(grantor);
                context.Principals.Add(grantee);
                context.Permissions.Add(permission);
                context.Resources.Add(resource);
                Assert.AreEqual(0, context.PermissionAssignments.Count());
            });

            resourceService.Setup(x => x.GetResourceByForeignResourceId(It.IsAny <int>(), It.IsAny <int>())).Returns(foreignResourceCache);
            resourceService.Setup(x => x.GetResourceByForeignResourceIdAsync(It.IsAny <int>(), It.IsAny <int>())).ReturnsAsync(foreignResourceCache);
            resourceService.Setup(x => x.GetResourcePermissions(It.IsAny <string>(), It.IsAny <int?>())).Returns(GetAvailablePermissionsList(permission));
            resourceService.Setup(x => x.GetResourcePermissionsAsync(It.IsAny <string>(), It.IsAny <int?>())).ReturnsAsync(GetAvailablePermissionsList(permission));


            Action tester = () =>
            {
                Assert.AreEqual(1, context.PermissionAssignments.Count());
                var firstAssignment = context.PermissionAssignments.First();
                Assert.IsFalse(firstAssignment.IsAllowed);
                Assert.AreEqual(grantor.PrincipalId, firstAssignment.AssignedBy);
                Assert.AreEqual(permission.PermissionId, firstAssignment.PermissionId);
                Assert.AreEqual(grantee.PrincipalId, firstAssignment.PrincipalId);
                Assert.AreEqual(resource.ResourceId, firstAssignment.ResourceId);
                DateTimeOffset.Now.Should().BeCloseTo(firstAssignment.AssignedOn, 2000);
            };

            context.Revert();
            var revokedPermission = new RevokedPermission(grantee.PrincipalId, permission.PermissionId, resource.ForeignResourceId, resourceType.Value, grantor.PrincipalId);

            service.RevokePermission(revokedPermission);
            tester();

            context.Revert();
            context.PermissionAssignments = new PermissionAssignmentTestDbSet();
            await service.RevokePermissionAsync(revokedPermission);

            tester();
        }