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)
这显然非常糟糕.
我的问题是,我确定如何以一种好的方式重构这一点.
我看到三种可能的方式:
直接使用定义的角色:ROLE_ADMIN,ROLE_CONSULTANT,ROLE_BUSINESS;
仍然使用组,但有一些常量与组名称,以避免在整个地方重复它们;
在FOSUserBundle之上使用多用户系统.我很快回顾了RollerworksMultiUserBundle和PUGXMultiUserBundle.虽然我不知道这是不是有点开销,因为我的用户实际上共享相同的信息.
如果你们能指出我正确的方向,那将非常感激.也许有一种完全正确的方法来实现这一点.
我的建议是直接使用角色,并完全停止使用FOSUserBundle组.大多数时候,它们都没用.在Symfony 2中尚未提供角色层次结构(稳定版本之前的方式)时,组是继承自symfony1 sfGuardPlugin的概念.在大多数情况下,角色层次结构足以满足需求,使团队更加复杂,没有任何好处.对于少数其他情况,我发现使用与项目的实际业务逻辑相关的选民比使用FOSUserBundle组更易于维护(我认为自4年以来我没有在任何项目中使用它们).
免责声明:我是FOSUserBundle的主要维护者.
归档时间: |
|
查看次数: |
112 次 |
最近记录: |