CakePHP - 站点离线 - 管理路由不起作用

时间:2011-07-16 15:02:05

标签: cakephp admin authentication

我在app_controllers.php文件中设置以下代码,以便在网站设置为OFFLINE(site_status = 0)时控制对网站的访问。

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布局。

我需要做些什么来解决这个问题。

谢谢!

2 个答案:

答案 0 :(得分:0)

嗯,首先看起来不合适的是:

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

这看起来非常错误,可能会导致您的问题。我建议将其更改为:

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

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

<强>编辑

First, check out the PHP logical operators。您正在向NOT的返回值附加$this->Auth->user()语句。因此,在用户登录后,您基本上会询问false是否等于null,当然这不是,也绝不会。{/ p>

Second, check out the PHP comparison operators。您不想检查$this->Auth->user()是否等于值null,您想要检查数据类型是否$this->Auth->user()的>等于类型 null。简而言之,null is a data type, not a value。如果您只需要在if语句中使用“=”,那么您可能希望使用相同的===检查或相同的不检查!==

答案 1 :(得分:0)

您的if条件看起来很奇怪。他们是:

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

即。当网站在线或用户未登录时,您正在使用离线布局。您确定这是您想要的吗?