Symfony2自定义安全选民无法正常工作

时间:2015-01-08 08:37:12

标签: security symfony

我为基于symfony(2.6.1)的项目实现了自己的安全选民。我按照此博客文章http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters和此文档:http://symfony.com/doc/current/cookbook/security/voters_data_permission.html

进行了此操作

我现在的问题是,方法" isGranted"我的选民永远不会被召唤。

我的选民课程如下:

namespace AppBundle\SecurityVoter;
use Symfony\Component\Security\Core\Authorization\Voter\AbstractVoter;
use Symfony\Component\Security\Core\User\UserInterface;

class FolderVoter extends AbstractVoter
{
    const EDIT = 'edit';

    protected function getSupportedClasses()
    {
        return array('\MyApp\Entity\Folder');
    }

    protected function getSupportedAttributes()
    {
        return array(self::EDIT);
    }

    protected function isGranted($attribute, $folder, $user = null)
    {
        if (!$user instanceof UserInterface) {
            return false;
        }

        if ($folder->getUserId() == $user->getId()) {

            return true;
        }

        return false;
    }
}

通过以下方式在services.yml中配置类:

security.access.folder_voter:
class: AppBundle\SecurityVoter\FolderVoter
public: false
tags:
  - { name: security.voter }

我使用的方法' is_granted'从树枝模板中。我错过了什么,或者我做错了什么,它不起作用?

1 个答案:

答案 0 :(得分:1)

我自己就找到了解决方案。这很简单。但在某些方面也很讨厌。

注意到这一点:

protected function getSupportedClasses()
{
    return array('\MyApp\Entity\Folder');
}

我必须像这样声明类名。所以没有领先的反斜杠:

protected function getSupportedClasses()
{
    return array('MyApp\Entity\Folder');
}

一般来说,安全投票人的实施可能会有所改善: - )