2011-07-16 8 views
0

app_controllers.phpファイルに次のコードを設定して、サイトがOFFLINE(site_status = 0)に設定されている場合にサイトへのアクセスを制御します。CakePHP - サイトオフライン - 管理ルーティングが機能しない

要求されたアドレスは、次のように見えるとき、すべてが素晴らしい作品
function beforeFilter(){ 
    // Site Offline = 0 , Site Online = 1 
    if($this->Configuration->get_site_status() == 1){ 
      // Allow access to the site to all users and perform all required 
      // beforeFilter code 
    }else{ 
     ... 
     // If site is OFFLINE but User is logged in allow access. 
     // Later I will need to change it to only allow admin access if logged in as I am still developing 
     // Everyone else will be denied access even if they are able to authenticate   
     if(!$this->Auth->user() == null){ 
      $this->layout = 'default'; 
      $this->Auth->allow('*'); 
     }else{   
      $this->layout = 'offline'; 
      $this->Auth->deny('*'); 
     } 
     ... 
    } 
} 

http://www.mydomain.com/articles 

しかし、私はそれはそれはへのアクセスを防止し、適切

http://www.mydomain.com/admin/articles 

動作しない、次のしているときサイトを正しく使用していますが、$this->layout = 'offline'は使用できません。デフォルトではdefaultのレイアウトに戻ります。

これを解決するには何が必要ですか?

ありがとうございました!

答えて

0

まあ、私には場違いに見える最初のものがある:

(!$this->Auth->user() == null) 

これは非常に間違っ見て、あなたの問題を引き起こしている可能性があります。

(!is_null($this->Auth->user()) 

または

($this->Auth->user() !== NULL) 

編集

First, check out the PHP logical operators:私のような何かにこれを変更することを示唆しています。戻り値$this->Auth->user()NOTステートメントを追加していました。だから、あなたがログインしたユーザは、本質的にfalsenullと等しいかどうかを尋ねていますが、それは当然ではありません。

Second, check out the PHP comparison operators。あなたは$this->Auth->user()あなたは$this->Auth->user()データ型nullタイプに等しいかどうかを確認したいとしている、値nullに等しいかどうかを確認したいされていません。要するに、null is a data type, not a value。 if文で "="を使用しなければならない場合は、同じ===チェックを使用するか、同一のチェックを!==と同じにします。

+0

私のコードのものを含めて、これらの表現はすべて同じことを表していると思いました。それにもかかわらず、私はあなたの最初の提案 '!is_null($ this-> Auth-> user())'を試して、私のコードはまだ同じように動作しています。 Authが管理者のルーティングプレフィックスをどのように処理しているのかは分かっていますが、それを修正する方法はわかりません。もう提案はありますか? –

+0

@CaboONE私は仕事に行く必要があります。私が降りる頃に誰もあなたに答えなかったら私は答えを広げます。 – cspray

0

お客様のifは奇妙に見えます。それらは:

If site is offline and user logged in 
    use default layout 
otherwise 
    use offline layout and require authentication on all pages 

です。あなたはサイトがオンラインであるか、またはユーザーがログインしていないときにオフラインレイアウトを使用しています。あなたが望むものは本当ですか?

+0

私はまもなく私の質問でより多くのコードを投稿しますが、そのアイデアは認証されていないすべてのユーザーにサイトをオフラインとして表示することです。ただし、サイトがオフラインとしてマークされているが、ユーザーが認証されている場合は、サイトを利用可能にします。まだACLを完全に実装していませんが、オフラインであってもADMINがサイトにアクセスできるようにすることが考えられます。 –

関連する問題