public async Task <Guid> AddPermission(AddPermissionCommand command, CancellationToken cancellationToken)
        {
            if (command == null)
            {
                throw new ArgumentNullException(nameof(command));
            }

            command.EnsureIsValid();

            var persistedPermission = await authorizationRepository.GetPermissionsBy(command.Domain, command.Resource, cancellationToken : cancellationToken).ConfigureAwait(false);

            if (persistedPermission?.Count > 0)
            {
                throw new BusinessException(Messages.PermissionAlreadyExist);
            }

            var permission = new Permission()
            {
                Domain   = command.Domain,
                Name     = command.Name,
                Resource = command.Resource
            };

            await authorizationRepository.AddPermission(permission, cancellationToken).ConfigureAwait(false);

            return(permission.Id);
        }