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



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

我在IRC和邮件列表中提出了疑问,但没有真正的方向。我更希望能够在现有安全组件的基础上添加此功能(最好是通过捆绑包)。我不确定如何使用symfony2的安全组件实现超过30-32个角色/权限。

我真的不希望自己开发一个基于ACL的安全系统。

如gilden之前在问题评论中所述:

但这正是ACL的用例。您可以从今天开始使用内置的ACL系统!它也很容易修改/扩展,以最好地满足您的需求。

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

  1. 安全-包括有关:身份验证和授权,用户和;模板中的角色、访问控制控制器
  2. 访问控制列表(acl) -包括有关:引导&;配置,创建ACL, ACE,检查访问&
  3. 高级ACL概念-包括有关:设计概念,数据库表结构,范围,预& &;授权后决策,达成授权决策的过程

在SO.com上也有一些关于Symfony2 acl的有趣问题

祝你好运!

我想你有点误解了acl系统,你只能创建32种角色,但是由域对象。这是通过对整数的位掩码操作完成的(这解释了'32'作为整数的限制是…好吧,你知道答案)。

因此,例如,删除一个对象的权限将是相同的- 'MASK_DELETE' -对于一个项目,一个里程碑或一个票据。如果你使用ProblematicAclManagerBundle你只需要输入:

$aclManager->addPermission($ticket, $userEntity, MaskBuilder::MASK_DELETE);

$aclManager->addPermission($projet, $userEntity, MaskBuilder::MASK_DELETE);

赋予用户删除$project或$ticket的权限。它还为域对象和用户创建acl条目(如果还没有)。我需要知道的是,你是否可以为一个类或一个bundle的每个类创建不同的掩码名称?

您可以在这里找到关于acl的更深入的解释

我知道这是一个旧的帖子,但我只是想与任何有类似答案的人分享。

提供解决方案的关键在于你的问题中的这句话:

系统中有许多不同的组件需要拥有自己的一组权限。

您可以为每个组件创建一个单独的投票人。

  • 创建扩展AclVoter的类
  • 覆盖supportsClass()方法,以确保投票人只投票给它所代表的组件类。
  • 创建自己的PermissionMap,包含组件所需的权限集。
  • 在服务配置中将PermissionMap传递给AclVoter
  • 将投票人标记为security.voter,以便AccessDecisionManager将开始使用它。

这会让你走很远。

我还建议去考虑ACL组件的代码,不幸的是有很多特性没有记录。

最新更新