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