Symfony2 自定义安全投票器不工作
Symfony2 custom security voter not working
我为基于 symfony (2.6.1) 的项目实现了自己的安全投票器。我是在这篇博文之后这样做的:http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters and this documentation: http://symfony.com/doc/current/cookbook/security/voters_data_permission.html
我现在的问题是,我的选民的方法 "isGranted" 从未被调用。
我的选民 class 看起来像这样:
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;
}
}
class在services.yml中的配置方式如下:
security.access.folder_voter:
class: AppBundle\SecurityVoter\FolderVoter
public: false
tags:
- { name: security.voter }
我正在使用树枝模板中的方法 'is_granted'。我错过了什么实施或我做错了什么它不起作用?
我刚刚自己找到了解决方案。这很容易。但在某些方面也很讨厌。
安装了这个:
protected function getSupportedClasses()
{
return array('\MyApp\Entity\Folder');
}
我必须这样声明 class 名称。所以没有前导反斜杠:
protected function getSupportedClasses()
{
return array('MyApp\Entity\Folder');
}
也许这可以在总体上改进安全选民实施:-)
我为基于 symfony (2.6.1) 的项目实现了自己的安全投票器。我是在这篇博文之后这样做的:http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters and this documentation: http://symfony.com/doc/current/cookbook/security/voters_data_permission.html
我现在的问题是,我的选民的方法 "isGranted" 从未被调用。
我的选民 class 看起来像这样:
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;
}
}
class在services.yml中的配置方式如下:
security.access.folder_voter:
class: AppBundle\SecurityVoter\FolderVoter
public: false
tags:
- { name: security.voter }
我正在使用树枝模板中的方法 'is_granted'。我错过了什么实施或我做错了什么它不起作用?
我刚刚自己找到了解决方案。这很容易。但在某些方面也很讨厌。
安装了这个:
protected function getSupportedClasses()
{
return array('\MyApp\Entity\Folder');
}
我必须这样声明 class 名称。所以没有前导反斜杠:
protected function getSupportedClasses()
{
return array('MyApp\Entity\Folder');
}
也许这可以在总体上改进安全选民实施:-)