Example #1
0
        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));
        }