Symfony 多个 IsGranted 在同一控制器上不起作用

问题描述 投票:0回答:1

我有一个控制器,在上面创建了 2 条路由:

#[Route('/announcement/create', name: 'app_admin_restock_announcement_create'), IsGranted(RestockVoter::CREATE_RESTOCK)]
#[Route('/announcement/edit/{id}', name: 'app_admin_restock_announcement_edit'), IsGranted(RestockVoter::EDIT_RESTOCK, 'restockQueue')]
public function detail(
    ?RestockQueue $restockQueue,
    ...

问题是用户可以

create
可以不能
edit

当我在路线

app_admin_restock_announcement_create
上调试时,它会转到我的自定义投票器并返回
true
。但同时它也返回
false
并且不会进入控制器。

我该如何处理这个问题?如果我不想创建单独的控制器。

这是一个临时解决方案:

if (is_null($restockQueue)) {
   $this->denyAccessUnlessGranted(RestockVoter::CREATE_RESTOCK);
} else {
   $this->denyAccessUnlessGranted(RestockVoter::EDIT_RESTOCK, $restockQueue);
}

但我希望仅使用 PHP 属性来完成。

php symfony
1个回答
0
投票

这是不可能的,因为在此控制器上同时运行 2 个 isGranted 属性。

© www.soinside.com 2019 - 2024. All rights reserved.