在FOSUserBundle中清除组和角色的使用

Did*_*hys 4 symfony fosuserbundle sonata-user-bundle

我目前正在开发一个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
   ...
}
Run Code Online (Sandbox Code Playgroud)

这显然非常糟糕.

我的问题是,我确定如何以一种好的方式重构这一点.
我看到三种可能的方式:

  1. 直接使用定义的角色:ROLE_ADMIN,ROLE_CONSULTANT,ROLE_BUSINESS;

  2. 仍然使用组,但有一些常量与组名称,以避免在整个地方重复它们;

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

如果你们能指出我正确的方向,那将非常感激.也许有一种完全正确的方法来实现这一点.

Chr*_*oet 5

我的建议是直接使用角色,并完全停止使用FOSUserBundle组.大多数时候,它们都没用.在Symfony 2中尚未提供角色层次结构(稳定版本之前的方式)时,组是继承自symfony1 sfGuardPlugin的概念.在大多数情况下,角色层次结构足以满足需求,使团队更加复杂,没有任何好处.对于少数其他情况,我发现使用与项目的实际业务逻辑相关的选民比使用FOSUserBundle组更易于维护(我认为自4年以来我没有在任何项目中使用它们).

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