======================================== 编辑 ====================================
根据查尔斯的建议,我使用以下代码完成了离线/在线功能,基于查尔斯代码:
<?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来隐藏我的登录表单。管理员单击该消息以显示登录表单。这是一种阻止任何登录试用的尝试。
============================ END EDIT ================= =========================
我想知道在CakePHP中创建“站点离线/在线”功能的最佳方法是什么。基本上,我想允许管理员关闭对所有注册的网站的访问权限。离线页面应具有登录访问权限,只有管理员才能登录。
我的想法是创建某种仪表板控制器,只要管理员登录,他/她就会被重定向到此仪表板,从那里他可以访问其他控制器操作(admin_edit等)。此仪表板和所有管理操作(admin_delete等)应使用管理布局。
这是一个好方法吗?对于离线/在线功能,我应该创建一个设置表,其中包含可以打开或关闭的site_offline字段吗?在允许或不访问网站之前,app_controller中应该使用哪些代码来检查它?
非常感谢你的帮助,
答案 0 :(得分:3)
首先在 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 功能
中查看它if (Configure::read('Site.status') == 0) {
$this->layout = 'maintenance';
$this->set('title_for_layout', __('Site_down_for_maintenance_title'));
} else {
// do something
}
我在这里加载一个单独的布局形式维护,让我添加我想要的任何布局
答案 1 :(得分:1)
如果要在数据库表中保存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的管理功能。这实际上是我使用的类的确切名称和相同的一般想法。