我为基于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'从树枝模板中。我错过了什么,或者我做错了什么,它不起作用?
答案 0 :(得分:1)
我自己就找到了解决方案。这很简单。但在某些方面也很讨厌。
注意到这一点:
protected function getSupportedClasses()
{
return array('\MyApp\Entity\Folder');
}
我必须像这样声明类名。所以没有领先的反斜杠:
protected function getSupportedClasses()
{
return array('MyApp\Entity\Folder');
}
一般来说,安全投票人的实施可能会有所改善: - )