FOSUserBundle 中组和角色的干净使用
Clean usage of groups and roles in FOSUserBundle
我目前正在从事 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
...
}
这显然很糟糕。
我的问题是我确定如何以良好的方式重构它。
我看到了三种可能的方式:
直接使用定义的角色:ROLE_ADMIN、ROLE_CONSULTANT、ROLE_BUSINESS;
仍然使用组,但组名有一些常量以避免在各处重复;
在 FOSUserBundle 之上使用多用户系统。我很快回顾了RollerworksMultiUserBundle and PUGXMultiUserBundle。虽然我不知道这是否有点开销,因为我的用户实际上共享相同的信息。
如果你们能指出我正确的方向,我将不胜感激。也许有一个完整的其他方法来正确地实现这一目标。
我的建议是直接使用角色,完全停止使用 FOSUserBundle 组。大多数时候,它们是无用的。
组是从 symfony1 sfGuardPlugin 继承的概念,当时角色层次结构在 Symfony 2 中尚不可用(在稳定版本之前)。
在大多数情况下,角色层次结构足以满足需求,使组变得更复杂没有任何好处。对于其他少数情况,我发现使用与项目的实际业务逻辑相关的选民比使用 FOSUserBundle 组更易于维护(我想我已经 4 年没有在任何项目中使用过它们了)。
免责声明:我是 FOSUserBundle 的主要维护者。
我目前正在从事 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
...
}
这显然很糟糕。
我的问题是我确定如何以良好的方式重构它。
我看到了三种可能的方式:
直接使用定义的角色:ROLE_ADMIN、ROLE_CONSULTANT、ROLE_BUSINESS;
仍然使用组,但组名有一些常量以避免在各处重复;
在 FOSUserBundle 之上使用多用户系统。我很快回顾了RollerworksMultiUserBundle and PUGXMultiUserBundle。虽然我不知道这是否有点开销,因为我的用户实际上共享相同的信息。
如果你们能指出我正确的方向,我将不胜感激。也许有一个完整的其他方法来正确地实现这一目标。
我的建议是直接使用角色,完全停止使用 FOSUserBundle 组。大多数时候,它们是无用的。 组是从 symfony1 sfGuardPlugin 继承的概念,当时角色层次结构在 Symfony 2 中尚不可用(在稳定版本之前)。 在大多数情况下,角色层次结构足以满足需求,使组变得更复杂没有任何好处。对于其他少数情况,我发现使用与项目的实际业务逻辑相关的选民比使用 FOSUserBundle 组更易于维护(我想我已经 4 年没有在任何项目中使用过它们了)。
免责声明:我是 FOSUserBundle 的主要维护者。