我已經擴展了用戶模型的一些權利,所以我可以爲用戶在不同的地方做一些操作的權利。Symfony登錄用戶還沒有全部屬性
在我得到的所有東西UserRepository我需要,我存儲在用戶對象的一切:
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正確設置好的。但是,當我重定向到/主頁的路由,並得到了用戶的defaultController:
$user = $this->getUser();
的$用戶對象沒有了權利。這裏有什麼問題?我不能在用戶對象中放置額外的東西嗎?
- 編輯---
我也嘗試序列的權利,所以用戶對象可以被保存在會話:
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);
}
在symfony的數獨,他們解釋說,這在每次查看時,他們每次都從數據庫獲取用戶。但他們如何管理角色?角色每次都在那裏,即使它們不在我的用戶對象中,因爲角色nandling是由另一個表完成的。
但是當用戶實體在會話中持久化時,爲什麼我會變成whith $ user = $ this-> getUser();完成不同的對象,就像我在UserRepository中修改用戶對象並在登錄時返回它一樣? –
我必須嘗試序列的權利,但沒有任何反應:公共職能序列化(){ 回報 連載(陣列( $這個 - > ID, $這個 - >用戶名, $這個 - >密碼, $此 - > rights )); } 公共職能反序列化($連載) { 列表( $這個 - > ID, $這個 - >用戶名, $這個 - >密碼, $這個 - >權利 )=反序列化($連載); } –
除非您明確表示,否則不會從存儲庫中獲取用戶。您不應該在存儲庫中執行這些操作:在存儲庫中,您應該選擇要檢索的實體,而不進行任何編輯。 – ste