超过32个角色/权限Symfony2安全系统?

时间:2011-09-05 19:09:51

标签: security symfony

Symfony2中的所有内容看起来都很不错,但有一个问题我似乎无法找到解决方案。问题是Symfony2的安全组件限制为30-32个角色/权限。我的一个项目,即项目管理/问题跟踪系统,将需要超过32个权限。系统中有许多不同的组件需要拥有自己的权限集。仅仅因为有人创建,读取,更新或删除问题权限并不意味着他们拥有项目,里程碑等的权限......每个组件都需要自己的创建,读取,更新和删除权限,而不是提到组件特定权限,毫无疑问我将达到30-32角色/权限限制。

我已经在IRC和邮件列表中提出质疑,但没有真正指示去哪里。我希望能够在现有安全组件之上添加此功能(最好通过捆绑包)。我不确定如何使用symfony2的安全组件实现超过30-32个角色/权限。

我真的不想用ACL开发自己的安全系统。

3 个答案:

答案 0 :(得分:4)

如前面gilden的评论中所述:

  

但这正是ACL的用例。您可以立即开始使用built-in ACL系统!修改/扩展也很容易,以最好地满足您的需求。

对于初学者,我认为最好按照以下顺序阅读Symfony2官方书籍中的这些文章:

  1. Security - 包括以下信息:身份验证和授权,用户&角色,模板中的访问控制&控制器
  2. Access Control Lists (ACLs) - 包括以下信息:Bootstrapping&配置,创建ACL,ACE,检查访问权限和累积权限
  3. Advanced ACL Concepts - 包括以下信息:设计概念,数据库表结构,范围,Pre&授权后决策,达成授权决策的流程
  4. 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的代码,遗憾的是有很多功能都没有记录。

相关问题