2013-02-10 11 views
5

これは私のsecurity.ymlファイルは、アクセス制御リストのように見える方法です:私は何をしたいことは、ユーザーが両方の役割(ROLE_ADMINとIS_AUTHENTICATED_FULLY)が必要ということです複数の役割2

access_control: 
    - { path: ^/admin, roles: IS_AUTHENTICATED_FULLY } 
    - { path: ^/admin, roles: ROLE_ADMIN } 

定義されたパスにアクセスするために使用します。しかし、上記のルールでは、ユーザーが役割のいずれかを持っている場合、ユーザーは定義されていないパスにアクセスできます。

- { path: ^/admin, roles:[ROLE_ADMIN,IS_AUTHENTICATED_FULLY] } 

定義済みのパスにアクセスするには、両方の役割を持つ必要があるルールを追加するにはどうすればよいですか?

+0

あなたは答えを見つけましたか?あなたが正しいと確認したものは間違っているようです。 – Electronick

答えて

1
IS_AUTHENTICATED_FULLY 

は、ユーザーが実際に認証されたときにtrueを返します。

匿名ユーザーは、技術的には、匿名ユーザーオブジェクトの にisAuthenticated()メソッドがtrueを返すことを意味し、認証されます。 ユーザーが実際に認証されているかどうかを確認するには、 IS_AUTHENTICATED_FULLYロールを確認します。

ユーザーが役割ROLE_ADMINを持ち、ログインしている場合、彼は完全に認証されます。その結果、この要件を設定する必要はありません。完全にすべてのユーザーを許可します

- { path: ^/admin, roles: ROLE_ADMIN } 

そして

- { path: ^/admin, roles: IS_AUTHENTICATED_FULLY } 

を認証しbeeingて含ま

- { path: ^/admin, roles: IS_AUTHENTICATED_FULLY } 

あなたが(下記参照)しているので、管理セクションを参照してください。

読む:http://symfony.com/doc/current/book/security.html

+0

IS_AUTHENTICATED_REMEMBEREDは、ユーザーがCookieでログインしていることを意味し、IS_AUTHENTICATED_FULLYはユーザーがログインページからログインする必要があることを意味します。だからuによると、ユーザーがログインしていない場合、ユーザーは引き続きadminセクションにアクセスできますか? – sonam

+0

まあ、匿名ユーザーは管理ページにアクセスできません。私はそれをテストしました – sonam

+0

いいえ、ログインによって認証されたユーザーには管理ページが表示されることを意味します。 –

1

ない特定の状況では、問題自体を見ます。

パスにアクセスするためにすべての指定されたロールを持つ必要がある場合、デフォルトのRoleVoterは、現在のセキュリティトークンに少なくとも1つの指定されたロールがある場合、アクセスを許可します。

RoleVoterトークンに渡されたロールの少なくとも1つがある場合、アクセスを許可しますが、セキュリティコンポーネントは指定されたロールのそれぞれを各投票者に個別に渡します。だから、あなたがする必要があるすべてはdecitionマネージャの戦略を変更することですし、動作変更、または行動する:私はあなたが間違って取得していない場合は

# app/config/security.yml 
security: 
    access_decision_manager: 
     # strategy can be: affirmative (default one), unanimous or consensus 
     strategy: unanimous # if any voter returns ACCESS_DENIED, access is denied 
0

、i)は、階層的な役割
がより良いアプローチhttp://symfony.com/doc/current/book/security.html#hierarchical-rolesだと思います。

 
#Hierarchical Roles 
Instead of associating many roles to users, you can define role inheritance rules by creating a role hierarchy: 

YAML 

app/config/security.yml 
security: 
    ... 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN:  ROLE_ADMIN 
     ROLE_BOTH_ROLE_TOGETHER: [IS_AUTHENTICATED_FULLY,ROLE_ADMIN] 

これらのoyuは階層をチェックできます。

関連する問題