2017-03-12 76 views
0

我是Symfony 3的新手。我試圖配置用戶和管理員可以訪問的路由。我有兩個角色:ROLE_USERROLE_ADMIN,我已經配置了我的security.xml如下:Symfony,允許訪問所有路由,除了一個(或兩個)

role_hierarchy: 
    ROLE_ADMIN: ROLE_USER 
    ROLE_SUPER_ADMIN: ROLE_ADMIN 


access_control: 
    - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/, role: ROLE_ADMIN } 
    - { path: ^/, role: ROLE_USER } 

我想允許ROLE_ADMIN用戶訪問除login所有路由。 我想允許ROLE_USER用戶訪問除loginadmin

我不知道爲什麼所有的路線,但它看起來像所有ROLE_ADMIN用戶還會收到ROLE_USER。我已經設置ROLE_USER訪問所有路由(通過在其路徑中設置^/),其中包括/admin/login路由。

問題是:如何設置路徑以正確拒絕ROLE_USER訪問/admin/login路由?

回答

4

我不知道爲什麼,但它看起來像所有ROLE_ADMIN用戶也收到 的ROLE_USER

那麼,這是角色層次的含義,你自己ROLE_ADMIN: ROLE_USER寫的。因此,由於管理員比用戶擁有更多特權,因此您不能限制他訪問用戶資源。

我不知道你爲什麼想要這種行爲,但是你可以在你的控制器中用一種解決方法來實現它。喜歡的東西:

/** 
* @Route("/login", name="login") 
*/ 
public function loginAction() 
{ 
    $context = $this->container->get('security.context'); 

    $user = $context->getToken()->getUser(); 

    $admin = $context->isGranted('ROLE_ADMIN'); 

    if ($admin){ 
     //hey I'm an admin, please redirect me to the correct ressource 
    } 

    if ( $user ){ 
     //hey I'm a simple user, what do you want me to do ? 
    }  
} 
+0

謝謝你,角色層次背叛了我:當我刪除它d ,中發揮的作用,就像我需要 –

+0

歡迎您:) – mickdev