我有一个控制器,在上面创建了 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 属性来完成。
这是不可能的,因为在此控制器上同时运行 2 个 isGranted 属性。