拒绝CakePHP中的某些控制器操作权限

时间:2010-10-23 21:59:02

标签: authentication cakephp permissions

这个想法非常简单。如果您尚未登录,则无法访问注册和登录页面旁边的任何页面。如果您已登录,则可以访问除注册页面之外的所有页面。

现在,通过使用CakePHP的Auth组件实现了一半。这会在未记录时限制访问,并允许在记录时进行访问。

我在这样做时偶然发现的问题是在记录时限制了对注册页面的访问。我尝试了不同的方法,结果相同:注册页面仍可访问。

需要一些帮助,因为我遇到了这个问题。

这是我的代码的一部分(UsersController类中的beforeFilter(); register()将是此控制器中的操作):

function beforeFilter(){
    parent::beforeFilter();

    $this->Auth->allow("register");

    if($this->Auth->user()){//if user is logged in...
        $this->Auth->deny("register");//...deny his access to register and login page
    }
}

2 个答案:

答案 0 :(得分:2)

尝试这样做:

function beforeFilter() {
    $this->Auth->authorize = 'controller';
    $this->Auth->allow('register');
}

function isAuthorized() {
    if ($this->Auth->user()) {
        $this->Auth->deny('register');
    }
}

更新:可能更清洁的解决方案是

function beforeFilter() {
    $this->Auth->authorize = 'controller';
    if(is_null($this->Auth->user())) {
        $this->Auth->allow('register');
    }
}

答案 1 :(得分:2)

function register()
{
    if ($this->Auth->user())
    {
        $this->redirect('someOtherPage');
        // or exit;
    }
    //other stuff
}