【发布时间】:2021-04-16 13:38:52
【问题描述】:
我正在使用 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,我认为它会返回一个403,但实际上返回一个500。
authorization 部分实际上正在工作,但我对我的逻辑中的这个“异常”有点困扰,因为其他授权规则将返回 200 或 403。
所以我的问题是:
- 有谁知道为什么这个异常会这样?如果这是正常行为或有问题
- 还有其他方法可以从这个
Listener返回403吗?
感谢您的宝贵时间!
【问题讨论】:
-
"statut" 你的意思是"status"
-
法语习惯,感谢您的意见。如果您对听众的事情有所了解,我将不胜感激
-
我想我可以帮助您提供更多信息。所以在你的情况下,它返回了一个 500 错误代码,所以请检查 var/dev.log,也许你能找到原因。否则你能不能写一个包含“CRITICAL”的行,这样我就可以帮你调试了
-
看文档,你可以创建一个类并使用它,或者自定义所有拒绝访问的响应symfony.com/doc/current/security/…
标签: symfony authorization listener api-platform.com access-denied