[Symfony1.4] 認証(authentication)と承認(authorization)のチェックは security.yml で設定する
Symfony1.4にて、ログイン認証していないユーザは特定のアクションを実行できないような処理をするのに、preExecute に認証チェックをしていました。
認証チェックが必要なモジュールのアクションファイルに全てに下記のような preExecute メソッドを記述していたのですが、認証・承認の処理はsecurity.ymlで設定を変更すれば一括でできるみたいです…。
/**
* アクション実行前にログイン認証が通っているか確認
* 認証が通っていない場合、ログインページにリダイレクト
**/
public function preExecute() {
if (!$this->getUser()->isAuthenticated()) {
$this->redirect('@user_login');
}
}
認証・承認の処理の設定ですが以下のように、security.yml を変更します。
■ /project/apps/frontend/config/security.yml
# You can find more information about this file on the symfony website:
# http://www.symfony-project.org/reference/1_4/en/08-Security
#default:
# is_secure: false
all:
is_secure: true
credentials: login
security.yml を修正後、忘れずに symfony cc します。
これでウェブサイトにアクセスすると認証していない場合、ログイン処理のページにリダイレクトされます。
ログイン処理に対応するモジュールとアクションを settings.yml に書いていない場合、デフォルトが ‘action’ => ‘login’, ‘module’ => ‘default’ となっているみたいで500エラーが返ってきました。
500 | Internal Server Error | sfConfigurationException Unable to find a matching route to generate url for params "array ( 'action' => 'login', 'module' => 'default',)".
ログイン処理に対応するモジュール、アクションの設定は以下のように書きます。
(この場合、UserLoginモジュールのLoginアクションにログイン処理をさせています。)
■ /project/apps/frontend/config/settings.yml (一部のみ抜粋)
all:
.actions:
login_module: UserLogin
login_action: Login
これで認証前にログインページ以外のページにアクセスしても、ログイン処理の画面が表示されるようになりました。
ログイン処理はこれで大丈夫なのですが、これでは新規ユーザ登録のページにアクセスした場合にもログイン処理のページが表示されてしまいます。
これは使えないので、新規ユーザ登録の処理をしているモジュールの認証チェックを外してやります。
モジュール以下のディレクトリに新たに /config/security.yml を作成します。
■ /project/apps/frontend/modules/UserRegister/config/security.yml
all:
is_secure: false
また、モジュール内の特定のアクションに対して認証チェックをする、しないという切り分けを設定することもできます。
例えば、NewアクションとCompleteアクションは認証チェックをしないで、Confirmアクションには認証チェックをするという場合は以下のように書きます。
new:
is_secure: false
confirm:
is_secure: true
complete:
is_secure: false
security.yml 、settings.yml を編集後は、symfony cc をするのをお忘れなく。
以上です。
【参考】
・The symfony Reference Book | security.yml 設定ファイル | symfony | Web PHP Framework
・security.yml 設定ファイル | 日本Symfonyユーザー会