对于我客户的网站我有一个管理部分 - 唯一的事情是我的管理员路由似乎没有密码保护。我添加了管理保护,其中包含有关如何设置用户系统的教程,并将以下代码放在app_controller.php中:
function beforeFilter() {
// if an admin route is requested and not logged in
$user = $this->Session->read('User');
if(isset($this->params['admin']) && $this->params['admin'] && is_null($user)) {
// set Flash and redirect to login page
$this->Session->setFlash('You need to be logged in for that action.','default',array('class'=>'flash_bad'));
$this->redirect(array('controller'=>'users','action'=>'login','admin'=>FALSE));
}
}
&安培;在我的app / config / routes.php中我有这个:
Router::connect('/login', array('controller' => 'users', 'action' => 'login'));
Router::connect('/admin/logout', array('controller' => 'users', 'action' => 'logout'));
我很确定缺少一些保护措施。
我仍然可以在不登录的情况下访问其他管理区域,即theowlhouse.com.au/admin/bookings。
我做错了什么?用户模型的管理页面是唯一受保护的页面。
谢谢:)
答案 0 :(得分:1)
您似乎对prefix routing使用auth component感到困惑。请注意,前缀路由在版本1.3之前称为“管理路由”。
您无需使用管理路由来使用auth组件。让我们从设置auth组件开始。在您的app控制器中,确保将其包含在组件数组中:
var $components = array('Auth');
完成此操作后,用户将被定向到登录页面,除非他们已登录。要允许匿名用户访问操作,您可以拨打$this->Auth->allow('action name');
,例如,说出来希望允许未经身份验证的用户在项目控制器中使用index()和view()操作,但不允许使用add()或edit()。在items_controller.php中,您可以设置beforeFilter()来进行调用:
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow(array(
'index',
'view'
));
}