Symfony2中的所有内容看起来都很不错,但有一个问题我似乎无法找到解决方案。问题是Symfony2的安全组件限制为30-32个角色/权限。我的一个项目,即项目管理/问题跟踪系统,将需要超过32个权限。系统中有许多不同的组件需要拥有自己的权限集。仅仅因为有人创建,读取,更新或删除问题权限并不意味着他们拥有项目,里程碑等的权限......每个组件都需要自己的创建,读取,更新和删除权限,而不是提到组件特定权限,毫无疑问我将达到30-32角色/权限限制。
我已经在IRC和邮件列表中提出质疑,但没有真正指示去哪里。我希望能够在现有安全组件之上添加此功能(最好通过捆绑包)。我不确定如何使用symfony2的安全组件实现超过30-32个角色/权限。
我真的不想用ACL开发自己的安全系统。
答案 0 :(得分:4)
如前面gilden的评论中所述:
但这正是ACL的用例。您可以立即开始使用built-in ACL系统!修改/扩展也很容易,以最好地满足您的需求。
对于初学者,我认为最好按照以下顺序阅读Symfony2官方书籍中的这些文章:
SO.com上也有一些有趣的问题Symfony2 ACLs
祝你好运!答案 1 :(得分:4)
我认为你有点误解了acl系统,你只能创建32种角色,但是通过域对象。这是使用整数上的位掩码操作完成的(这解释了'32'限制为整数是......你知道答案了。)
因此,例如删除一个对象的权限相同 - 'MASK_DELETE' - 对于项目来说是里程碑或票证。因此,如果您使用ProblematicAclManagerBundle,则必须执行此操作:
$aclManager->addPermission($ticket, $userEntity, MaskBuilder::MASK_DELETE);
或
$aclManager->addPermission($projet, $userEntity, MaskBuilder::MASK_DELETE);
授予您的用户删除$ project或$ ticket的权限。它还为域对象创建acl条目,并为用户创建条目(如果它们尚不存在)。我需要知道的是,你是否可以为一个类或一个包的每个类创建不同的掩码名称?
你会在acls here
上找到更深入的解释答案 2 :(得分:0)
我知道这是一篇很老的帖子,但我只是想和那些有类似答案的人分享这个帖子。
提出解决方案的关键在于您的问题中的这句话:
系统中有许多不同的组件需要拥有自己的一组权限。
对于这些组件中的每一个,您都可以创建一个单独的选民。
AclVoter
。supportsClass()
方法,以确保选民只会投票支持其所针对的组件的类。PermissionMap
,其中包含该组件所需的权限集。PermissionMap
传递给服务配置中的AclVoter
。security.voter
,以便AccessDecisionManager
开始使用它。这应该会让你走得很远。
我还建议考虑ACL Component的代码,遗憾的是有很多功能都没有记录。