使用 FosUserBundle symfony2 管理多个角色

Posted

技术标签:

【中文标题】使用 FosUserBundle symfony2 管理多个角色【英文标题】:Manage multiple roles with FosUserBundle symfony2 【发布时间】:2015-05-19 06:17:04 【问题描述】:

我是 symfony 的新手,我正在使用 FosUserBundle 进行用户管理,现在我想使用 FosUserBundle 进行角色管理(使用单独的表管理角色),并且需要根据分配给他/她的角色授予用户访问权限。请提出一些好的解决方案来实现此功能?

【问题讨论】:

【参考方案1】:

您可以使用用户组为用户设置所需的角色。并在控制器或树枝模板中使用 isGranted('ROLE') 方法进行检查

【讨论】:

【参考方案2】:

你可以查看security.yml的配置文档:

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md

然后在层次结构中指定您的角色后,您可以开始在 security.yml 配置的 access_control 部分中授予对特定角色的访问权限。

由于某些原因,您需要在树枝或控制器中进行检查,还有一些功能可以让您检查用户是否被授予这个或那个角色:

$this->container->get('security.context')->isGranted('YOUR_CUSTOM_ROLE');

或树枝:

%if is_granted('YOUR_CUSTOM_ROLE')% /* show some custom data */ %endif%

您还可以使用以下方法从用户中添加或删除角色:

   $user->removeRole('ROLE_ADMIN');
   $user->addRole('YOUR_CUSTOM_ROLE'); 
   $em->persist($user);
   $em->flush();

这主要是您通常需要的角色,access_control 配置、Twig 检查、控制器检查和添加/删除角色。

【讨论】:

感谢您的回答。是的,我可以通过 security.yml 配置管理访问控制,但在这里我想通过数据库管理访问控制(动态)。 symfony 有什么方法可以用来管理对数据库表的访问吗? 我不确定是否有用于数据库的 ACL,但是有 Symfony 的 ACE 访问控制实体与 ACL 相结合,您可以允许 ROLE 编辑特定实体symfony.com/doc/current/cookbook/security/acl.html

以上是关于使用 FosUserBundle symfony2 管理多个角色的主要内容,如果未能解决你的问题,请参考以下文章

FOSUserBundle 使用电子邮件登录 (Symfony2)

使用 FOSUserBundle 自动登录 Symfony2 [重复]

Symfony2:FOSUserBundle 删除操作错误

Symfony2 多 FosUserBundle

使用 FosUserBundle symfony2 管理多个角色

Symfony2:使用 FOSUserBundle 时如何在控制器内获取用户对象?