2008年5月6日 - 14:48

特定actionのみでトークンを再発行する

以前requireAuthの拘束が強すぎるというのを書いたんですが、実際にrequireAuth指定していないアクションではトークンの再生成などを行わないよう、Securityコンポーネントをいじってみました。具体的には次のような拡張コンポーネントを作成します。

PHP:
  1. require_once(COMPONENTS.'security.php');
  2.  
  3. class MySecurityComponent extends SecurityComponent
  4. {
  5.     function startup(&$controller)
  6.     {       
  7.         if (!in_array($controller->action, $this->requireAuth)) {
  8.             $controller->params['requested'] = 1;           
  9.         }
  10.        
  11.         parent::startup($controller);
  12.     }
  13. }

あとはコントローラの$componentsに作成したの(ここではMySecurity)を追加すればOK。ただし、拡張版を使う際は大元のSecurityコンポーネントは$componentsから撤去する必要があります。単なるincludeとは違ってオブジェクト生成が行われるのでstartupメソッドが自動で実行されてしまい、意味がなくなってしまいます。

$controller->params['requested']というのは本来Object::requestActionを通ったかどうかの判定に使っているようですが、実際にこれを元に場合分けしてるのは1.1ではSecurityComponent::startupだけみたい。

パーマリンク | コメント(0) | タグ: CakePHP

トラックバック URL :

コメントを投稿