gpt4 book ai didi

symfony - FOSUserBundle 中组和角色的干净使用

转载 作者:行者123 更新时间:2023-12-03 05:12:23 25 4
gpt4 key购买 nike

我目前正在开发 Symfony2 项目。它基于Sonata并使用SonataUserBundle/FOSUserBundle来管理用户。最初的开发做得很糟糕,我正在重构其中的大部分内容。

该应用程序定义了三个级别的用户:

  • 管理员
  • 顾问
  • 企业

这些被定义为带有 FOSUserBundle 的组,并附加了许多角色。

现在,在代码中的任何地方,以前的开发人员都使用(硬编码)组的数据库 ID 来制作如下案例:

$userGroup = $em->getRepository('ApplicationSonataUserBundle:Group')->findOneByName($group_name);
$userGroupId = $userGroup->getId();

if ($userGroupId == 1) {
// Administrator case
...
} else if ($userGroupId == 7) {
// Consultant case
...
}

这显然是非常糟糕的。

我的问题是我确定如何以良好的方式重构它。
我看到了三种可能的方法:

  1. 直接使用定义的角色进行工作:ROLE_ADMIN、ROLE_CONSULTANT、ROLE_BUSINESS;

  2. 仍然使用组,但使用一些带有组名称的常量,以避免到处重复;

  3. 在 FOSUserBundle 之上使用多用户系统。我赶紧回顾了RollerworksMultiUserBundlePUGXMultiUserBundle 。虽然我不知道这是否有点开销,因为我的用户实际上共享相同的信息。

如果你们能给我指出正确的方向,我将不胜感激。也许还有一种完整的其他方法可以正确实现这一目标。

最佳答案

我的建议是直接使用角色,并完全停止使用 FOSUserBundle 组。大多数时候,它们是无用的。组是从 symfony1 sfGuardPlugin 继承的概念,当时角色层次结构在 Symfony 2 中尚不可用(远远早于稳定版本)。在大多数情况下,角色层次结构足以满足需求,但使组变得更加复杂却没有任何好处。对于其他少数情况,我发现使用与项目实际业务逻辑相关的投票者比使用 FOSUserBundle 组更易于维护(我想我已经 4 年没有在任何项目中使用过它们了)。

免责声明:我是 FOSUserBundle 的主要维护者。

关于symfony - FOSUserBundle 中组和角色的干净使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31700595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com