admin auth check不工作

时间:2011-04-16 07:31:54

标签: cakephp routing admin authentication

对于我客户的网站我有一个管理部分 - 唯一的事情是我的管理员路由似乎没有密码保护。我添加了管理保护,其中包含有关如何设置用户系统的教程,并将以下代码放在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。

我做错了什么?用户模型的管理页面是唯一受保护的页面。

谢谢:)

1 个答案:

答案 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'
    ));
}