【发布时间】:2015-01-27 20:04:31
【问题描述】:
这是Voter类中的supportsClass函数
http://symfony.com/doc/2.5/cookbook/security/voters_data_permission.html
public function supportsClass($class)
{
$supportedClass = 'AppBundle\Entity\Post';
return $supportedClass === $class || is_subclass_of($class, $supportedClass);
}
我想知道是否可以为同一个包中的多个实体使用一个类投票器,或者我必须为每个实体创建一个投票器?
编辑 我找到了这个解决方案:
public function supportsClass($class)
{
$classes = array(
'Project\AgenceBundle\Entity\Agence',
'Project\AgenceBundle\Entity\SubAgence',
'Project\AgenceBundle\Entity\Subscription'
);
$ok = false;
foreach($classes as $supportedClass)
$ok = $ok || $supportedClass === $class || is_subclass_of($class, $supportedClass);
return $ok;
}
【问题讨论】:
-
是的,正如您在@Jindra 答案中看到的那样,但仅对具有共同点并通过接口表达这一点的类执行此操作。不要为一堆不同的实体创建一个投票者类,不要乱用大量的 if 和 switch。
-
您好,如何删除此函数中的所有 lignes 并将其替换为
return true;。 -
这几乎让选民系统的整个观点毫无用处。 Voter 允许您为特定对象编写可重用的逻辑。您应该拥有与应用程序逻辑需求一样多的选民。也许你可以告诉我们你想要做什么。对于您的用例,可能会有更好的东西。像 ACL。
-
嗨,@Jindra:我有一些与实体用户相关的实体,我想保护它们,用户只能删除和编辑他自己的实体。我已经编辑了我的问题
-
您所找到的想法与我写的答案几乎相同。我已编辑我的答案以提供更多信息。
标签: php symfony symfony-security