Symfony2のユーザーには、権限のレベルを細かく設定できます。
ここでの説明には、Entity経由でログイン編のソースを使います。
権限を確認するために、アクションを1つ追加します。
Controller/DefaultController.php
... /** * @Route("/user/sugoi") * @Template() */ public function sugoiAction() { return array( ); } ...
Resources/views/Default/sugoi.html.twig
sugoi
当たり前ですが、この時点では、ログインすれば app_dev.php/user/sugoi にはアクセスできます。
では、アクセスできなくしてみましょう。
app/config/security.yml
… access_control: - { path: ^/user/sugoi, roles: [ROLE_ADMIN] }
これで、 app_dev.php/user/sugoi にアクセスすると、403になるようになりました。
では、一度ログアウトして、UserクラスのRoleをROLE_ADMINにしましょう。
Entity/User.php
private $roles = array('ROLE_ADMIN');
これでログインすると、 app_dev.php/user/sugoi にアクセスできます。
role_hierarchyの設定は、権限の上下関係を表しています。現在は、
role_hierarchy: ROLE_ADMIN: ROLE_USER
となっていますので、security.ymlを、
… access_control: - { path: ^/user/sugoi, roles: [ROLE_USER] }
としても、ROLE_ADMINの人は、 app_dev.php/user/sugoi にアクセスすることができます。
access_controlの設定は、rolesの他にも、
- requires_channel : アクセス方法の設定(https と指定すると強制的にhttps接続になります)
- ip : 接続元IPアドレスの設定("192.168.0.1/24"とか指定可)
などで縛ることができます。(あとhostとかmethodsとかあるようですが確認できませんでした)
rolesには特殊な権限を3種類設定することができます。(ここから引用)
- IS_AUTHENTICATED_ANONYMOUSLY : 実際にログインしていないユーザが、サイト上のファイアーウォールの保護された場所にアクセスしたユーザに自動的に割り当てるロール。これは匿名アクセスを許しているときのみ使用可能です。
- IS_AUTHENTICATED_REMEMBERED : remember me クッキーを介して認証されたユーザに自動的に割り当てるロール。
- IS_AUTHENTICATED_FULLY : 現在のセッション中にログインをしたユーザに自動的に割り当てるロール。
早い話が、ANONYMOUSLYは、firewallsで設定されていて、anonymousがfalseでない箇所に、ログインしていないユーザーが入ったら設定される、REMEMBEREDは、「remember me」機能を使う場合の権限、FULLYは、ログイン中の全ユーザーが対象になります。REMEMBEREDについては、引用元URLを参照してください。