写了一个自定义选民并注册了作为服务(项目中的第一个自定义选民), 用以下方法测试:
/**
* @Route("/delete/{id}", name="product_delete")
* @Method("GET")
*/
public function deleteAction(Product $product)
{
if (!$this->get('security.context')->isGranted("PRODUCT_DELETE", $product)) {
throw new \Exception('ACCESS DENIED');
}
}
它按预期工作。然而,
/**
* @Route("/delete/{id}", name="product_delete")
* @Method("GET")
* @SecureParam(name="product", permissions="PRODUCT_DELETE")
*/
public function deleteAction(Product $product)
{
}
无论SecureParam注释如何,选民都会收到一个包含以下参数的电话:
$attributes = ["ROLE_USER"];
$object instanceof \Symfony\Component\HttpFoundation\Request
我此刻正撞在墙上......
答案 0 :(得分:1)
使用Symfony2,有一个access listener(在kernel.request事件上),它将根据" security.access_control"检查当前的安全上下文。参数(通常位于app / config / security.yml中)。
此侦听器使用access decision manager,负责向注册选民委派对象(请求)和配置的角色(属性),然后做出授予或拒绝访问的决定。其中一个选民是RoleVoter,负责说当前用户是否具有给定的角色。
这就是你的选民收到这些论点的原因。它应该通过返回VoterInterface :: ACCESS_ABSTAIN来忽略它们,因为它可能不是它的目的来处理它们。
我希望我足够清楚。