私はいくつかの権限でユーザーモデルを拡張しました。Symfony Logged inユーザーはすべてのプロパティを持っていません
if($user instanceof UserInterface){
// get the roles
$userRoles = $this->getEntityManager()->getRepository('BackofficeBundle:UserRoles')->findBy(
array('userId' => $user->getId())
);
if(!empty($userRoles)){
foreach ($userRoles as $userRole){
$user->setRoles($userRole->getRole());
}
}
// get the rights
$userRights = $this->getEntityManager()->getRepository('BackofficeBundle:UserRights')->findBy(
array('userId' => $user->getId())
);
if(!empty($userRights)){
foreach ($userRights as $userRight){
$user->setRight($userRight->getActionRight());
}
}
}
すべてが正常であるとuserRightsが正しくsettedされています。私は私が必要とするすべてのものを取得していますし、私はユーザーオブジェクトのすべてを格納していますUserRepositoryで
。しかし、ときに私は/ホームページルートにリダイレクトとしてdefaultControllerでユーザーを取得しています:$ユーザーオブジェクトはもう権利を持っていない
$user = $this->getUser();
。ここで何が間違っていますか?ユーザーオブジェクトに余分なものを置くことはできませんか?
- EDIT ---私も、ユーザオブジェクトがセッションに保存することができますので、権利をシリアル化しようとしている
:symfonyのDOKUで
public function serialize()
{
return serialize(array(
$this->id,
$this->username,
$this->password,
$this->rights
));
}
public function unserialize($serialized)
{
list (
$this->id,
$this->username,
$this->password,
$this->rights
) = unserialize($serialized);
}
、彼らがいることを、説明しますすべてのビューで、DBから毎回ユーザーを取得します。しかし、彼らはどのように役割を管理していますか?ロールは、別のテーブルによってロールの乱れが行われるため、ユーザーオブジェクト内になくてもその都度存在します。
しかし、User Entityがセッション内で永続化されている場合、なぜwhith $ user = $ this-> getUser()になるのですか?ユーザオブジェクトを変更してログインした後、私がUserRepositoryに持っているのと同じ完全な別のオブジェクトですか? –
私が権利をシリアル化しようとしましたが、何も起こりません:$このパブリック関数のシリアル化() { リターンにserialize(配列( ます$ this-> ID、 ます$ this->ユーザ名、 ます$ this->パスワードを、 - >権利 )); } パブリック関数のアンシリアライズ($直列化された) { リスト( ます$ this-> ID、 ます$ this->ユーザ名、 ます$ this->パスワード、 ます$ this->権利 )=アンシリアライズ($連載); } –
明示的にしない限り、リポジトリからユーザーをフェッチしません。リポジトリでは、そのようなことを行うべきではありません。リポジトリでは、編集することなく取得するエンティティを選択するだけです。 – ste