首页 > 解决方案 > Symfony Voters 收集对象

问题描述

我正在使用 Voters 来管理我的应用程序的权限,并且对于单个对象来说一切正常。

我似乎无法将 Voter 应用于对象集合。例如,我有一个端点 /persons 将返回完整的人员列表,但它应该根据每个用户的权限进行过滤(部门经理应该只看到自己部门中的人员)。有没有办法对选民这样做?

标签: symfonysecurity

解决方案


这可以使用授权检查器来完成:

// your controller

private $authorizationChecker;

public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
    $this->authorizationChecker = $authorizationChecker;
}

// in your action

return array_filter($userCollection, function (User $user) {
    return $this->authorizationChecker->isGranted('VOTER_NAME', $user);
});

或者只是如果你是控制器扩展 Symfony 的Controller类:

return array_filter($userCollection, function (User $user) {
    return $this->isGranted('VOTER_NAME', $user);
});

推荐阅读