CakePHP - Создать функцию Offline / Online для сайта - PullRequest
2 голосов
/ 15 июня 2011

============================================== РЕДАКТИРОВАТЬ ====================================

В соответствии с предложением Чарльза, я выполнил функцию Offline / Online, используя следующий код, основанный на коде Чарльза:

<?php

      Class AppController extends Controller{

          // prevents unauthorized access
          public $components = array('Auth');

          // the name of the model storing site_offline boolean
          public $uses = array('Configuration');

          // callback invoked before every controller action
          public function beforeFilter() {

              // returns your site_offline status assuming 0 is offline
              if ($this->Configuration->get_site_status() == 1) {
                   $this->Auth->allow('*');
              }else {
                   if(($this->Configuration->get_site_status() == 0) and (!$this->Auth->user() == null)){
                       // I set it up like this for now to allow access to any authenticated user, 
                       //but later will change it to only allow admins access thru a login form
                       $this->Auth->allow('*');
                   }else{ 
                       //If site is offline and user is not authenticated, sent them to 
                       // the a screen using the OFFLINE layout and provide a screen for login.
                       $this->layout = 'offline';  
                       $this->setFlash('Maintenance Mode. Check back shortly.');
                       $this->Auth->deny('*');
                   }
              }

          }

       }
 ?>

Затем я использовал jQuery, чтобы скрыть форму входа. Администратор нажимает на сообщение, чтобы показать форму входа. Это попытка предотвратить попытки входа в систему.

============================ КОНЕЦ РЕДАКТИРОВАНИЯ ================= =========================

Я хотел бы знать, каков наилучший способ создания «сайта в автономном режиме / онлайн» в CakePHP. В принципе, я хотел бы разрешить администратору отключать доступ к сайту всем зарегистрированным или нет. Офлайн-страница должна иметь доступ для входа, через который могут войти только администраторы.

Идея, которую я имею, состоит в том, чтобы создать некоторый контроллер панели мониторинга, где, как только администратор войдет в систему, он / она будет перенаправлен на эту панель управления, откуда он сможет получить доступ к другим действиям контроллера (admin_edit и т. Д.). Эта панель инструментов и все действия администратора (admin_delete и т. Д.) Должны использовать макет администратора.

Это хороший подход? Для автономной / онлайн-функции я должен создать таблицу настроек с полем site_offline, которое можно включить или выключить? Где в app_controller и какой код следует использовать, чтобы проверить его перед тем, как разрешить или запретить доступ к сайту?

Большое спасибо за вашу помощь,

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

сначала добавьте конфигурацию в core.config

/*
 * This is the site maintenance 
 *   The built in defaults are:
 *
 * - '1' - Site works
 * - '0' - site down for maintenance.
 */

Configure::write('Site.status', 1);

в AppController , вы проверите его в beforeRender function

if (Configure::read('Site.status') == 0) {
            $this->layout = 'maintenance';
            $this->set('title_for_layout', __('Site_down_for_maintenance_title'));
        } else {
// do something
}

Я загружаю отдельный макет из формы обслуживания, чтобы я мог добавить любой макет, какой захочу

1 голос
/ 18 июня 2011

Если вы собираетесь сохранить логическое значение site_offline в таблице базы данных, вы сможете легко сделать это с помощью обратного вызова в AppController и компоненте Auth.

<?php

AppController extends Object {

    // prevents unauthorized access
    public $components = array('Auth');

    // the name of the model storing site_offline boolean
    public $uses = array('NameOfModel');

    // callback invoked before every controller action
    public function beforeFilter() {

        // returns your site_offline status assuming 0 is offline
        if ($this->NameOfModel->get_status() === 0) {
             $this->Auth->deny('*');
        } else {
             $this->Auth->allow('*');
        }

    }

}

Мне всегда нравилась идеяDashboardsController для функций администратора.На самом деле это точное название класса, который я использую, и та же общая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...