我有一个自定义用户提供程序实体,允许我连接用户。这个自定义用户提供程序实体根据这个接口实现UserInterface我有一个“getRoles()”函数,它给了我用户的角色。
但我的角色是递归的。 示例:用户获得了role1,role1继承了role2,因此用户获得了role1和role2。为了实现这种递归,我创建了一个角色表,一个role_role表(父/子),一个用户表,最后是一个user_role表。
要获得所有用户的角色,我必须使用Doctrine查询我的数据库,以便从哪里可以做到这一点? 似乎禁止从实体查询,我不能将查询放在实体存储库classe中,因为我无法覆盖实体的“getRoles()”,并且访问存储库表单实体似乎不是一个好主意
P.-S:谢谢你放纵我的语法,这是我的第一个英文信息(我是法国人)。
答案 0 :(得分:0)
Symfony 2.x中的DB中没有角色层次结构。它在security.yml中配置,请查看http://symfony.com/doc/current/book/security.html#hierarchical-roles。
如果您不想直接从Symfony 2使用此功能,则必须自己实现一个RoleVoter,直接从DB获取角色层次结构。
另一种可能性是使用Doctrine Events Listeners(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html)从DB加载层次结构。您可能需要收听postLoad事件。
答案 1 :(得分:0)
解决方案是完全使用Doctrine的ORM。
在User实体中添加一个集合变量,该变量引用与ORM链接的所有UserRole:
@ORM\OneToMany(targetEntity="RoleUser", mappedBy="user")
...
protected $roleUser;
在RoleUser实体中添加一个允许使用正确的RoleUser绑定User的ORM:
@ORM\ManyToOne(targetEntity="User", inversedBy="roleUser")
...
protected $user;
现在您可以将所有UserRoles链接到用户。 要获取角色,请在UserRole实体和Role之间以及RoleRole和Role之间编写“sames”ORM。最后,您可以通过$ rolesUtilisateur从用户访问您的角色。