コード例 #1
0
        public async Task ShouldModifyExistingAndAddPermissions()
        {
            // Arrange
            Guid               expectedId            = Guid.NewGuid();
            string             expectedName          = "Modified Name";
            ICollection <Guid> expectedPermissionIds = new List <Guid>
            {
                Guid.NewGuid(),
                               Guid.NewGuid()
            };
            Role entity     = Role.Create(expectedId, "Name", "Code");
            var  repository = new Mock <IRoleRepository>();

            repository.Setup(e =>
                             e.GetByIdAsync(It.IsAny <Guid>(), It.IsAny <CancellationToken>())).ReturnsAsync(entity);
            ModifyRoleCommand cmd =
                new ModifyRoleCommand(expectedId, expectedName, "Code", expectedPermissionIds, 1);

            RoleCommandHandler actual = new RoleCommandHandler(repository.Object);

            // Act
            await actual.HandleAsync(cmd);

            // Assert
            Assert.IsTrue(entity.Id == expectedId);
            Assert.IsTrue(entity.Name == expectedName);
            Assert.IsTrue(entity.RolePermissions != null);
            Assert.IsTrue(entity.RolePermissions.Count == expectedPermissionIds.Count);
        }
コード例 #2
0
        public async Task HandleAsync(ModifyRoleCommand message,
                                      CancellationToken token = default(CancellationToken))
        {
            var role = await this.GetRoleAsync(message.RoleId);

            role.Modify(message.Name, message.Code, message.Version);
            if (message.PermissionIds == null || message.PermissionIds.Count == 0)
            {
                if (role.RolePermissions.Count != 0)
                {
                    role.UnassignAllPermissions();
                }
            }
            else
            {
                var existingPermissionIds = (from permission in role.RolePermissions
                                             select permission.PermissionId).ToList();

                foreach (var permissionId in message.PermissionIds)
                {
                    if (!role.RolePermissions.Any(e => e.PermissionId == permissionId))
                    {
                        role.AssignPermission(permissionId);
                    }
                }

                foreach (var permissionId in existingPermissionIds)
                {
                    if (!message.PermissionIds.Any(e => e == permissionId))
                    {
                        role.UnassignPermission(permissionId);
                    }
                }
            }
            await _roles.SaveChangesAsync(token);
        }