0

ユーザーを接続できるカスタムユーザープロバイダーエンティティがあります。このカスタムユーザープロバイダーエンティティは、このインターフェイスに従ってUserInterfaceを実装します。ユーザーのロールを提供する「getRoles()」関数があります。

しかし、私の役割は再帰的です。例:ユーザーがrole1を取得した場合、role1はrole2を継承したため、ユーザーはrole1とrole2を取得しました。この再帰性を作成するために、ロールテーブル、role_roleテーブル(親/子)、ユーザーテーブル、最後にuser_roleテーブルを作成します。

すべてのユーザーのロールを取得するには、Doctrineを使用してDBにクエリを実行する必要があるので、どこからそれを実行できますか?エンティティからのクエリは禁止されているようです。エンティティの「getRoles()」を上書きできず、リポジトリフォームエンティティにアクセスするのは得策ではないため、エンティティリポジトリクラスにクエリを入れることができません。 。

P.-S .:私の文法を楽しんでくれてありがとう、それは私の最初の英語のメッセージです(私はフランス語です)。

4

2 に答える 2

0

Symfony2.xのDBには役割階層はありません。これはsecurity.ymlで設定されます。http://symfony.com/doc/current/book/security.html#hierarchical-rolesをチェックしてください。

この機能をSymfony2から直接使用したくない場合は、DBから直接ロール階層を取得するRoleVoterを自分で実装する必要があります。

もう1つの可能性は、Doctrineイベントリスナー(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html)を使用してDBから階層をロードすることです。おそらくpostLoadイベントをリッスンする必要があります。

于 2013-02-18T14:40:11.257 に答える
0

解決策は、DoctrineのORMを完全に使用することです。

ORMでリンクされているすべてのUserRoleを参照するコレクション変数をUserエンティティに追加します。

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

RoleUserエンティティに、ユーザーを適切なRoleUserにバインドすることを許可するORMを追加します。

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

これで、すべてのUserRolesをユーザーにリンクさせることができます。ロールを取得するには、UserRoleエンティティとRoleの間、およびRoleRoleとRoleの間に「sames」ORMを記述します。最後に、$rolesUtilisateurによってユーザーから自分のロールにアクセスします。

于 2013-02-20T12:58:18.700 に答える