public async Task <UserDTO> Handle(RevokeUserPermissionCommand command) { var forAgg = await _session.Get <UserAggregate>(command.Input.ForId); var byAgg = await _session.Get <UserAggregate>(command.Input.ById); command.Input.PermissionsToRevoke = VerifyActions( forAgg, byAgg, command.Input.PermissionsToRevoke, new List <string> { typeof(UserPermissionsRequestedEvent).FullName, typeof(UserPermissionRevokedEvent).FullName, typeof(UserPermissionRequestDeniedEvent).FullName }); if (command.Input.PermissionsToRevoke.Any()) { var permissionAggregates = new List <PermissionAggregate>(); foreach (var request in command.Input.PermissionsToRevoke) { permissionAggregates.Add(await _session.Get <PermissionAggregate>(request.Key)); } forAgg.RevokePermission(byAgg, command.Input); await _session.Commit(); _email.SendPermissionsRevokedMessage(forAgg, permissionAggregates); } return(_mapper.Map <UserDTO>(forAgg)); }