public async Task <UserDTO> Handle(GrantUserPermissionCommand command) { var forAgg = await _session.Get <UserAggregate>(command.Input.ForId); var byAgg = await _session.Get <UserAggregate>(command.Input.ById); command.Input.PermissionsToGrant = VerifyActions( forAgg, byAgg, command.Input.PermissionsToGrant, new List <string> { typeof(UserPermissionGrantedEvent).FullName }); if (command.Input.PermissionsToGrant.Any()) { var permissionAggregates = new List <PermissionAggregate>(); foreach (var request in command.Input.PermissionsToGrant) { permissionAggregates.Add(await _session.Get <PermissionAggregate>(request.Key)); } forAgg.GrantPermission(byAgg, permissionAggregates, command.Input); await _session.Commit(); _email.SendPermissionsGrantedMessage(forAgg, permissionAggregates); } return(_mapper.Map <UserDTO>(await _session.Get <UserAggregate>(forAgg.Id))); }