2009-08-07 7 views
0

CakePHPでは、$this->Auth->allow('someMethod');を使用して、ログインせずにページを表示できるようにします。ユーザーがログインしているときに同じページを表示できないようにするにはどうすればよいですか?この例は、ユーザがログインしなくてもアクセス可能なレジスタページですが、ユーザがログインした後はアクセスできません。ユーザーがログインしているときに、一部のページを利用できないようにする方法

$this->Auth->deny('someMethod')isAuthorized()に入れていますが、その方法が許可リストでisAuthorizedは、そのページを実行しようとすると呼び出されません。

入力がありますか?あなた

答えて

3

Cake Authに組み込まれているような複雑なルールはありません。このような状況を手動で確認する必要があります。それはしかし非常に簡単です:

// Controller 
function register() { 
    if ($this->Auth->user()) { 
     $this->redirect(/* somewhere else */); 
    } 
} 

反しmlevitsの答えに、あなたがセッションに何かを保存する必要はありません、情報Authコンポーネント自体から容易に入手可能です。 http://book.cakephp.org/view/387/user

deny()を動的に使用する方法もありますが、このIMHOのような単純なケースではそれほど明確ではありません。 http://book.cakephp.org/view/383/deny
また、deny()はエラーメッセージ(「あなたはこのロケーションにアクセスする権限がありません」)を生成しますが、これはユーザーエクスペリエンスには望ましくないかもしれません。

+0

事は...私の所見は、許可リストにあるページを見るときにisAuthorized()が呼び出されないことを示唆しています。 しかし、とにかく、それがケーキの認証を介して行うことができない可能性があることを確認していただきありがとうございます。 – user152235

+0

'isAuthorized()'は、あなたが拒否または許可されたもので許可されているかどうかを計算します。 'deny()'はすべての人にアクションを拒否するので、動的に使うのが理にかなっています。あなたが望むのは、ユーザーが単純にログインしている場合は、拒否(またはリダイレクト)することです。これを行うには、上記のコードを使用します。 – deceze

+0

'isAuthorized()'の説明を読んでください、それは "ログインしています"とは非常に異なっています:http://api.cakephp.org/class/auth-component#method-AuthComponentisAuthorized – deceze

0

EDITありがとう:

は、CakePHPは異なる構文を使用したことを知りませんでした。

あなたはその後、セッション変数を設定するには、次を使用することができます

$this->Session->write('user_id', '<some_user_name>'); 

その後、彼らがログインしている場合は、ユーザーをリダイレクトするためにこれを使用します。

if ($this->Session->check('user_id')) 
{ 
    $this->redirect('http://google.com'); 
} 

そしてセッションの使用を破壊します:

$this->Session->destroy() 

More information about CakePHP Sessions

ありがとう

+2

この質問は一般的にPHPではないcakePHPについてです。 – linead

+0

こんにちはmlevitはあなたの返事に感謝します...はい私は確かに私がやりたいことを達成するためにセッションを使用することができます...しかし、私はちょうど私がそれを行うことができますCakePHP認証で何かがなければならないと思った...ちょうどAuth-> allow()で何ができるのですか? – user152235

+0

CakePHPの構文を修正しました。あなたは 'allow 'を使うのと同じ方法で' $ this-> Auth-> deny() 'を使うことができます。私はかなり確信しています。 – mlevit

0

アプリケーション全体での確認を可能にするには、AppControllerの[フィルタ]の前の方法で確認できます。例:

<?php 
class AppContoller extends Controller { 
    var $components = array('Session', 'Auth'); 

    function beforeFilter(){ 
     $this->Auth->allow('register', 'home'); 
     // Check if current action allowed to access without authorization and User has login 
     if(array_key_exists($this->params['action'], $this->Auth->allowedActions) && $this->Auth->user()){ 
      $this->redirect(/* somewhere else */); 
     } 
    } 
} 
?> 

もちろん、AppControllerではなくコントローラで実装することもできます。

関連する問題