0

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

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

要获得所有用户的角色,我必须使用 Doctrine 查询我的数据库,那么我可以从哪里做到这一点?似乎禁止从实体查询,并且我无法将查询放入实体存储库类中,因为我无法覆盖实体的“getRoles()”,并且访问存储库表单实体似乎不是一个好主意.

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

4

2 回答 2

0

解决方案是完全使用 Doctrine 的 ORM。

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

@ORM\OneToMany(targetEntity="RoleUser", mappedBy="user")
...
protected $roleUser;

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

@ORM\ManyToOne(targetEntity="User", inversedBy="roleUser")
...
protected $user;

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

于 2013-02-20T12:58:18.700 回答
0

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

如果你不想直接从 Symfony 2 中使用这个特性,你必须自己实现一个 RoleVoter,它可以直接从数据库中获取角色层次结构。

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

于 2013-02-18T14:40:11.257 回答