超过 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 安全系统?的主要内容,如果未能解决你的问题,请参考以下文章

如何为我的 symfony2 网站实现权限角色/组系统

Symfony2 在 Twig 中获取用户角色

角色权限

在 Symfony2 中动态添加角色

Symfony2 用户权限管理

使用 FosUserBundle symfony2 管理多个角色