2017-03-12 7 views
0

私はSymfony 3を初めて使用しています。ユーザーと管理者がアクセスできるルートを設定しようとしています。私は2つの役割があります。次のようにROLE_USERROLE_ADMINを、私は私のsecurity.xmlを構成した:symfony、1つまたは2つ以外のすべてのルートへのアクセスを許可する

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_ADMINROLE_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

ありがとう、その役割階層は私を裏切っ:私はそれを削除した場合、私はあなたが歓迎されている –

+0

を必要とするようにD は、役割が働いた:) – mickdev

関連する問題