SecurityVoter基于类而不是对象

时间:2015-01-08 15:01:43

标签: symfony

这是关于SecurityVoter的问题。

使用Symfony 2.6,您可以创建更简单的安全选民,以检查用户是否具有对象的特定权限:

protected function isGranted($attribute, $object, $user = null)
{
    switch ($attribute) {
        case self::VIEW:
            return $object->getAuthor() === $user;
        case self::EDIT:
            return $object->getAuthor() === $user && time() - $object->getAddedAt()->getTimestamp() <= TicketMessage::PERMIT_EDIT_GAP;
        default:
            return false;
    }
}

有效。但是如果我想根据类而不是对象检查属性呢?例如,创建一个“创建”权限,用于创建暂时不存在的新对象。

代码示例:

is_granted('create', 'AppBundle\Entity\MyEntity')

或:

is_granted('create', 'AppBundle:Entity')

有办法吗?

感谢。

1 个答案:

答案 0 :(得分:-1)

请阅读Symfony Best PracticlesSymfony Voters上的文档,以便更好地理解Symfony的概念。 如果您确实需要仅根据类属性检查权限,那么决定将常量。因此,Symfony Best Practicles

中描述了控制应用程序逻辑的推荐方法
  

最佳实践:使用常量定义配置选项   很少改变。

正如您所看到的,有两种推荐的方法可以满足您的需求:

  • 使用常量(例如,您可以在您的中定义一些常量 自定义YourBundle\SecurityManager
  • 使用parameters.yml进行配置