CakePHP - Сайт не в сети - Маршрутизация администратора не работает - PullRequest
0 голосов
/ 16 июля 2011

Я установил следующий код в моем файле 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 голосов
/ 17 июля 2011

Ваши if условия выглядят странно.Это:

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

Т.е. вы используете автономный макет, когда сайт находится в сети, ИЛИ пользователь не вошел в систему. Вы уверены, что это то, что вы хотите?

0 голосов
/ 16 июля 2011

Ну, первое, что мне кажется неуместным:

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

Это выглядит очень неправильно и может быть причиной ваших проблем. Я бы предложил изменить это на что-то вроде:

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

или

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

редактирует

Сначала проверьте логические операторы PHP . Вы добавляли оператор NOT к возвращаемому значению $this->Auth->user(). Итак, когда пользователь вошел в систему, вы по существу спрашиваете, равно ли false равен null, что, конечно, не так и никогда не будет.

Во-вторых, посмотрите операторы сравнения PHP . Вы не хотите проверять, равно ли значение из $this->Auth->user() значению null, вы хотите проверить, является ли тип данных из $this->Auth->user() равен типу null. Короче говоря, null - это тип данных, а не значение . Если вам просто нужно использовать «=» в вашем операторе if, то вы захотите использовать идентичный === или идентичный не проверенный !==.

...