具有自定义用户提供程序实体的递归角色



我有一个自定义的用户提供程序实体,它允许我连接用户。这个自定义用户提供程序实体根据这个接口实现UserInterface。我有一个"getRoles()"函数,它为我提供了用户的角色。

但我的角色是递归的。示例:一个用户得到了一个角色1,角色1继承了角色2,所以用户得到了角色1和角色2。为了使这种递归性,我创建了一个角色表、一个角色角色表(父/子)、一个用户表,最后是一个用户角色表。

为了获得所有用户的角色,我必须使用Doctrine查询我的DB,那么我从哪里可以做到这一点?从实体中查询似乎是被禁止的,我不能将查询放在实体存储库类中,因为我不能覆盖实体的"getRoles()",而且从实体中访问存储库似乎不是一个好主意。

第页-S.:谢谢你对我语法的宽容,这是我的第一条英语信息(我是法国人)。

Symfony 2.x中的DB中没有角色层次结构。它是在security.yml checkout中配置的http://symfony.com/doc/current/book/security.html#hierarchical-角色。

如果你不想直接使用Symfony 2的这个功能,你必须实现一个RoleVoter,直接从DB获得角色层次结构。

另一种可能性是使用条令事件监听器(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html)从数据库加载层次结构。您可能需要收听postLoad事件。

解决方案是充分使用条令的ORM。

在用户实体中添加一个集合变量,该变量引用所有与他链接的UserRole和ORM:

@ORMOneToMany(targetEntity="RoleUser", mappedBy="user")
...
protected $roleUser;

在RoleUser实体中添加一个ORM,该ORM允许将用户与正确的RoleUser:绑定

@ORMManyToOne(targetEntity="User", inversedBy="roleUser")
...
protected $user;

现在,您可以获得链接到该用户的所有UserRoles。要获得角色,请在UserRole实体和Role之间以及RoleRole和Role间编写"sames"ORM。最后,您可以通过$rolesUtilisateur从User访问您的角色。

最新更新