使用 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 [重复]