2016-04-22 10 views
1

fosuser無視するには、ここに私のsecurity.ymlがsymfonyのだから、カスタムロール

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: bcrypt 

    role_hierarchy: 
     ROLE_CLINICIAN: ROLE_USER 
     ROLE_ADMIN:  ROLE_CLINICIAN 
     ROLE_OWNER:  ROLE_ADMIN 
     ROLE_SUPER_ADMIN: ROLE_OWNER 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username_email 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     main: 
      pattern: ^/ 
      form_login: 
       provider:  fos_userbundle 
       csrf_provider: security.csrf.token_manager 
      logout: true 
      anonymous: ~ 

    access_control: 
     - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: /, roles: ROLE_USER } 
     - { path: ^/, roles: ROLE_ADMIN } 
     - { path: ^/api, roles: ROLE_OWNER } 
     - { path: ^/api, roles: ROLE_SUPER_ADMIN } 
     - { path: ^/api/clinics, roles: ROLE_CLINICIAN } 

である私は、この

ROLE_CLINICIAN 
     | 
    ROLE_ADMIN 
     | 
    ROLE_OWNER 
     | 
ROLE_SUPER_ADMIN 

のような役割の階層を持つ必要があります。しかし、今、私がしたいんだためにsymfonyは、それを無視しますROLE_CLINICIANはpath: ^/api/clinicsページにしかアクセスできませんが、このロールはまだ各ページにアクセスしています

答えて

0

ここに実際の解決策があります

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: bcrypt 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_CLINICIAN 
     ROLE_OWNER:  ROLE_ADMIN 
     ROLE_SUPER_ADMIN: ROLE_OWNER 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username_email 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     main: 
      pattern: ^/ 
      form_login: 
       provider:  fos_userbundle 
       csrf_provider: security.csrf.token_manager 
      logout: 
       path: fos_user_security_logout 
       target: fos_user_security_login 
      anonymous: ~ 

    access_control: 
     - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/api/clients, roles: ROLE_CLINICIAN } 
     - { path: ^/api, roles: ROLE_SUPER_ADMIN } 
     - { path: ^/api, roles: ROLE_OWNER } 
     - { path: ^/#/, roles: ROLE_USER } 

パス:トリックを置くことですので^ /は、ROLE_USERのそれぞれの親がとにかく各ページへのアクセス権を持っているので、私のアプリ内のすべてのページへのアクセス権を与えるが、http://symfony.com/doc/current/cookbook/security/access_control.html

Remember, the first rule that matches is usedによって - {パスを:^/#/、roles:ROLE_USER}をリストの最後に追加します。

0

アクセス制御ルールは、上から下に向かって評価されます。最初に一致するアクセス制御ルールが勝ちます。あなたの例では、これは最後の4つのルールが決して考慮されないことを意味します。 ROLE_CLINICIANロールにはROLE_USERロールが含まれているため、ユーザーには常にアクセス権が与えられます。

アクセス制御ルールの評価方法については、in the documentationを参照してください。

関連する問題