2017-10-20 164 views
1

在我的網站中,我想給一些用戶更改角色的能力,請點擊按鈕。我用以下方式實現它:更改後訪問基於禁止的用戶角色

$post = Request::createFromGlobals(); 
if($post->request->has('change') && $user->hasRole('ROLE_MEDIA') == False){ 
     $em = $this->getDoctrine()->getManager(); 
     $user->setRoles(array('ROLE_MEDIA')); 
     $em->flush(); 
} 

它工作正常,檢查數據庫後,我可以在主控制器中恢復標誌沒有問題。問題如下:點擊按鈕並訪問受限制頁面的用戶誰擁有ROLE_MEDIA,我得到一個403錯誤。 Symfony似乎沒有檢測到新的用戶角色。我使用下面的代碼限制了一些網頁:

/** 
* 
* @Security("has_role('ROLE_MEDIA')") 
*/ 

我不明白的問題,因爲我可以在我的控制器訪問正確的價值觀......在此先感謝

+1

嘗試檢查,如果你找到一個解決方案[這裏](https://github.com/symfony/symfony/issues/12025) –

+0

它的工作原理在註銷後然後重新登錄? – dmnptr

+0

感謝您提供的網址@VitaliyRyaboy!我可以在那裏找到解決方案,謝謝你的幫助 –

回答

0

我發現,最簡單的解決方案是再生會話ID刷新會話:

$post = Request::createFromGlobals(); 
if($post->request->has('change') && $user->hasRole('ROLE_MEDIA') == False){ 
     $em = $this->getDoctrine()->getManager(); 
     $user->setRoles(array('ROLE_MEDIA')); 
     $em->flush(); 
     $this->get('session')->migrate(); 
}