diff --git a/src/Endpoint/Create.php b/src/Endpoint/Create.php index fe8df6e..a6465ef 100644 --- a/src/Endpoint/Create.php +++ b/src/Endpoint/Create.php @@ -33,7 +33,10 @@ class Create $schema = $resourceType->getSchema(); if (! evaluate($schema->isCreatable(), [$context])) { - throw new ForbiddenException(); + throw new ForbiddenException(sprintf( + 'Cannot create resource type %s', + $resourceType->getType() + )); } $model = $this->newModel($resourceType, $context); diff --git a/src/Endpoint/Delete.php b/src/Endpoint/Delete.php index fe71629..b4f9c40 100644 --- a/src/Endpoint/Delete.php +++ b/src/Endpoint/Delete.php @@ -30,7 +30,11 @@ class Delete $schema = $resourceType->getSchema(); if (! evaluate($schema->isDeletable(), [$model, $context])) { - throw new ForbiddenException(); + throw new ForbiddenException(sprintf( + 'Cannot delete resource %s:%s', + $resourceType->getType(), + $resourceType->getAdapter()->getId($model) + )); } run_callbacks($schema->getListeners('deleting'), [&$model, $context]); diff --git a/src/Endpoint/Index.php b/src/Endpoint/Index.php index c4d6449..631a7e4 100644 --- a/src/Endpoint/Index.php +++ b/src/Endpoint/Index.php @@ -40,7 +40,10 @@ class Index $schema = $resourceType->getSchema(); if (! evaluate($schema->isListable(), [$context])) { - throw new ForbiddenException(); + throw new ForbiddenException(sprintf( + 'Cannot list resource type %s', + $resourceType->getType() + )); } $query = $adapter->query(); diff --git a/src/Endpoint/Update.php b/src/Endpoint/Update.php index 931444a..8427805 100644 --- a/src/Endpoint/Update.php +++ b/src/Endpoint/Update.php @@ -31,7 +31,11 @@ class Update $schema = $resourceType->getSchema(); if (! evaluate($schema->isUpdatable(), [$model, $context])) { - throw new ForbiddenException(); + throw new ForbiddenException(sprintf( + 'Cannot update resource %s:%s', + $resourceType->getType(), + $resourceType->getAdapter()->getId($model) + )); } $data = $this->parseData($resourceType, $context->getRequest()->getParsedBody(), $model); diff --git a/src/Exception/ForbiddenException.php b/src/Exception/ForbiddenException.php index c069f1c..5db4720 100644 --- a/src/Exception/ForbiddenException.php +++ b/src/Exception/ForbiddenException.php @@ -22,7 +22,8 @@ class ForbiddenException extends DomainException implements ErrorProviderInterfa return [ new Error( new Error\Title('Forbidden'), - new Error\Status($this->getJsonApiStatus()) + new Error\Status($this->getJsonApiStatus()), + ...($this->message ? [new Error\Detail($this->message)] : []) ) ]; }