Symfony - 抛出异常从监听器返回 403
Symfony - Throw an exception returning 403 from a Listener
我正在使用 Symfony5
和 ApiPlatform
我正在使用 Listener
执行多项任务,包括做一些 authorization
我无法在我的选民中完成的事情。
所以通过一个简单的条件我验证了我的实体的哪个字段被修改了。
我查看修改后的字段,检查它们是否与唯一可以修改的字段不同。
方法如下:
$modifiedValues = $eventArgs->getEntityManager()->getUnitOfWork()->getEntityChangeSet($eventArgs->getObject());
foreach ($modifiedValues as $key => $value) {
if ("statut" != $key) {
throw new AccessDeniedException('Vous ne pouvez pas modifier ce champ.');
}
}
现在我抛出一个 AccessDeniedException
我认为会 return 一个 403
但实际上 return 一个 500
.
authorization
部分实际上在工作,但我对我的逻辑中的这个“异常”有点困扰,因为其他授权规则将 return 200
或 403
.
所以我的问题是:
- 有谁知道为什么这个异常会这样?如果这是正常行为或有问题
- 还有其他方法可以从这个
Listener
return 403
吗?
感谢您的宝贵时间!
根据 documentation,您可以配置框架来捕获您的异常。
config/packages/api_platform.yaml
api_platform:
exception_to_status:
Symfony\Component\Security\Core\Exception\AccessDeniedException: 403
但您可能应该创建自己的异常 class,从 AcessDeniedException 扩展它并配置它。
src/Exception/AccessDeniedException.php
<?php
namespace App\Exception;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class MyAccessDeniedException extends AccessDeniedException
{
}
config/packages/api_platform.yaml
api_platform:
exception_to_status:
App\Exception\MyAccessDeniedException: 403
Listener.php
$modifiedValues = $eventArgs->getEntityManager()->getUnitOfWork()->getEntityChangeSet($eventArgs->getObject());
foreach ($modifiedValues as $key => $value) {
if ("statut" != $key) {
throw new MyAccessDeniedException('Vous ne pouvez pas modifier ce champ.');
}
}
我正在使用 Symfony5
和 ApiPlatform
我正在使用 Listener
执行多项任务,包括做一些 authorization
我无法在我的选民中完成的事情。
所以通过一个简单的条件我验证了我的实体的哪个字段被修改了。
我查看修改后的字段,检查它们是否与唯一可以修改的字段不同。
方法如下:
$modifiedValues = $eventArgs->getEntityManager()->getUnitOfWork()->getEntityChangeSet($eventArgs->getObject());
foreach ($modifiedValues as $key => $value) {
if ("statut" != $key) {
throw new AccessDeniedException('Vous ne pouvez pas modifier ce champ.');
}
}
现在我抛出一个 AccessDeniedException
我认为会 return 一个 403
但实际上 return 一个 500
.
authorization
部分实际上在工作,但我对我的逻辑中的这个“异常”有点困扰,因为其他授权规则将 return 200
或 403
.
所以我的问题是:
- 有谁知道为什么这个异常会这样?如果这是正常行为或有问题
- 还有其他方法可以从这个
Listener
return403
吗?
感谢您的宝贵时间!
根据 documentation,您可以配置框架来捕获您的异常。
config/packages/api_platform.yaml
api_platform:
exception_to_status:
Symfony\Component\Security\Core\Exception\AccessDeniedException: 403
但您可能应该创建自己的异常 class,从 AcessDeniedException 扩展它并配置它。
src/Exception/AccessDeniedException.php
<?php
namespace App\Exception;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class MyAccessDeniedException extends AccessDeniedException
{
}
config/packages/api_platform.yaml
api_platform:
exception_to_status:
App\Exception\MyAccessDeniedException: 403
Listener.php
$modifiedValues = $eventArgs->getEntityManager()->getUnitOfWork()->getEntityChangeSet($eventArgs->getObject());
foreach ($modifiedValues as $key => $value) {
if ("statut" != $key) {
throw new MyAccessDeniedException('Vous ne pouvez pas modifier ce champ.');
}
}