超过 32 个角色/权限 Symfony2 安全系统?
Posted
技术标签:
【中文标题】超过 32 个角色/权限 Symfony2 安全系统?【英文标题】:More Than 32 Roles/Permissions Symfony2 Security System? 【发布时间】:2011-09-05 19:09:50 【问题描述】:Symfony2 中的一切看起来都不错,但是有一个问题我似乎也找不到解决方案。问题是 Symfony2 的安全组件仅限于 30-32 个角色/权限。我的一个项目,一个项目管理/问题跟踪系统,将需要超过 32 个权限。系统中有许多不同的组件需要拥有自己的一组权限。仅仅因为某人对问题具有创建、读取、更新或删除权限并不意味着他们对项目、里程碑等具有这些权限......每个组件都需要自己的创建、读取、更新和删除权限提到组件特定的权限,毫无疑问我会达到 30-32 个角色/权限的限制。
我曾在 IRC 和邮件列表中询问过,但没有真正指明去哪里的方向。我希望能够在现有安全组件之上添加此功能(最好通过捆绑包)。我不确定如何使用 symfony2 的安全组件获得超过 30-32 个角色/权限。
我真的不希望自己开发带有 ACL 的安全系统。
【问题讨论】:
但这正是 ACL 的用例。您可以立即开始使用built-in ACL system!它也很容易修改/扩展以满足您的需求。 我想我忘记了 ACL 确实允许您全局设置权限(基于类)而不仅仅是直接对象。我会试一试,看看会发生什么。 看起来我将不得不在带有 ACL 的安全包中扮演我的角色,因为我真的希望它存储在 MongoDB 中,而 Symfony 的安全 ACL 组件似乎只是 mysql 你确定吗?提到支持 MongoODM。写成here in the grey tooltip。 【参考方案1】:如前 gilden 的问题 cmets 所述:
但这正是 ACL 的用例。您可以立即开始使用built-in ACL 系统!它也很容易修改/扩展以满足您的需求。
对于初学者,我认为最好按照以下顺序阅读 Symfony2 官方书中的这些文章:
-
Security - 包括以下信息:身份验证和授权、用户和角色、模板和控制器中的访问控制
Access Control Lists (ACLs) - 包括以下信息:引导和配置、创建 ACL、ACE、检查访问和累积权限
Advanced ACL Concepts - 包括以下信息:设计概念、数据库表结构、范围、授权前后决策、达成授权决策的流程
在 SO.com 上还有一些关于 Symfony2 ACLs 的有趣问题
祝你好运!
【讨论】:
【参考方案2】:我想你有点误解了acl系统你只能创建32种角色,而是通过域对象。这是通过对整数使用位掩码操作来完成的(这将 '32' 限制解释为整数是......你知道答案)。
例如,删除一个对象的权限将是相同的 - 'MASK_DELETE' - 对于项目里程碑或工单。因此,如果您使用 ProblematicAclManagerBundle,您只需要这样做:
$aclManager->addPermission($ticket, $userEntity, MaskBuilder::MASK_DELETE);
或
$aclManager->addPermission($projet, $userEntity, MaskBuilder::MASK_DELETE);
例如授予您的用户删除 $project 或 $ticket 的权限。它还为域对象创建 acl 条目,并为用户创建条目(如果它们尚不存在)。我需要知道的是,您是否可以为一个类或捆绑包的每个类创建不同的掩码名称?
你会在aclshere找到更深入的解释
【讨论】:
【参考方案3】:我知道这是一篇旧帖子,但我只是想与任何有类似答案的人分享。
提供解决方案的关键在于您问题中的这句话:
系统中有许多不同的组件需要拥有自己的权限集。
对于这些组件中的每一个,您都可以创建一个单独的投票者。
创建一个扩展AclVoter
的类。
重写supportsClass()
方法以确保投票者只会投票给它所针对的组件的类。
创建您自己的PermissionMap
,其中包含组件所需的权限集。
将PermissionMap
传递给您的服务配置中的AclVoter
。
将选民标记为security.voter
,以便AccessDecisionManager
开始使用它。
这应该会让你走得很远。
我还建议考虑 ACL Component 的代码,遗憾的是,有很多功能没有记录在案。
【讨论】:
以上是关于超过 32 个角色/权限 Symfony2 安全系统?的主要内容,如果未能解决你的问题,请参考以下文章