2013-11-26 80 views
1

我找不到這個特定的任何東西;Symfony2 - 檢查用戶是否具有身份驗證角色

我需要一個簡單的檢查,當用戶登錄在前端,如果該用戶已經例如角色:ROLE_CUSTOMER

我需要這將在authenticationprocess完成的,因爲它必須返回一個錯誤,如果用戶不要有這個角色。

Security.yml

public: 
     pattern: ^/ 
     context:   site 
     form_login: 
      provider:  fos_userbundle 
      csrf_provider: form.csrf_provider 
      check_path:  site_login_check 
      login_path:  site_login 
      success_handler: authentication_handler 
      failure_handler: authentication_handler     
     logout: 
      path:   site_logout 
      target:   site_login 
     anonymous: true 
+0

您使用什麼登錄方式? [文檔中的方法](http://symfony.com/doc/current/cookbook/security/entity_provider.html)? –

+0

我使用FOSuserbundle – Chris

回答

7

我認爲在這種情況下,你將不得不寫自己的用戶提供,事業FOSuserbundle假設默認角色是ROLE_USER,如果用戶沒有任何,它會自動將其與用戶相關聯,並且在啓用用戶後,FOS將該用戶視爲有效登錄。 或者你需要指定你自己的login_check。還有一種方法,基本上你假設FOSuser進行登錄和身份驗證,然後你可以創建一個服務,將其稱爲successLoginHandler,在用戶通過fos「登錄」之後,你可以自己做那裏的東西,並檢查這個角色。如果這不存在,則發送拒絕訪問異常。

public function __construct($securityContext) 
{ 
    $this->securityContext = $securityContext; 
} 

public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
{ 
    if(!$this->securityContext->isGranted('ROLE_CUSTOMER')){ 
     throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; 
    } 
} 
+0

感謝您的答案,我需要考慮這一點。 – Chris

+0

也許如果你解釋一下,爲什麼你想檢查它 - >編輯我的答案。也許這可以幫助。 – ghostika

+0

謝謝安德拉斯,我嘗試了幾個..爲什麼我想檢查它?它可能類似「額外」我已經在fos_user表中的所有用戶,例如,如果用戶在前端(CUSTOMER)登錄ROLE_ADMIN,它將在登錄後顯示一條拒絕訪問的消息。因此,我可以防止.. – Chris