Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ACL权限和创建新对象_Php_Symfony_Permissions_Acl - Fatal编程技术网

Php ACL权限和创建新对象

Php ACL权限和创建新对象,php,symfony,permissions,acl,Php,Symfony,Permissions,Acl,我正在使用自定义投票者(而不是内置的通用ACL系统)构建具有访问控制的Symfony2应用程序。检查权限通常如下所示: $this->isGranted('EDIT', $someObject); 这告诉我当前用户是否可以编辑该对象。但是我应该如何处理创建新对象的权限检查 假设一个类似cassical博客的系统。我有分类,有帖子,有评论。我可以通过传入实际对象来检查查看、编辑和删除权限,但如何检查是否允许用户创建新的评论、帖子或类别 我想对于评论,我可以检查博客帖子的CREATE_COM

我正在使用自定义投票者(而不是内置的通用ACL系统)构建具有访问控制的Symfony2应用程序。检查权限通常如下所示:

$this->isGranted('EDIT', $someObject);
这告诉我当前用户是否可以编辑该对象。但是我应该如何处理创建新对象的权限检查

假设一个类似cassical博客的系统。我有分类,有帖子,有评论。我可以通过传入实际对象来检查查看、编辑和删除权限,但如何检查是否允许用户创建新的评论、帖子或类别

我想对于评论,我可以检查博客帖子的CREATE_COMMENT权限。对于发布新的博客帖子,我可以对照类别检查CREATE_POST。但是在类别之上没有任何内容,那么如何/如何检查创建新类别

或者,我应该根据对象的类型检查创建权限,而不是针对父对象检查创建权限吗?例如:

$isGranted('CREATE', 'My\Bundle\Entity\Comment');
这看起来还可以,但没有考虑用户想要评论的帖子


在许多框架和语言中都有大量的ACL系统。对象创建权限通常是如何处理的?

桑德尔,你是对的:要使用创建权限,你应该像在中一样在“类”级别检查它们

$securityContext->isGranted('CREATE', 'My\Bundle\Entity\Comment');
您知道如何创建ACL规则吗? 我更喜欢问,因为SF2文档中没有很好地说明这一点。这些文档只告诉如何设置特定于对象的ACE,而不告诉如何设置特定于类的ACE

作为起点,您应该(假设您在控制器中):

希望这有帮助

编辑:犯了一些复制/粘贴错误,并在示例中添加了更多内容

$aclProvider = $this->get('security.acl.provider');
$acl = $aclProvider->createAcl(new ObjectIdentity('class', 'My\Bundle\Entity\Comment');
$builder = new MaskBuilder();
$builder->add('create');
// Can be changed to
// $securityIdentity= UserSecurityIdentity::fromAccount($user);
$securityIdentity = new UserSecurityIdentity($user->getUsername(), 'My\Bundle\Entity\User');
$acl->insertClassAce($securityIdentity, $builder->get());