Запретить определенное разрешение действия контроллера в CakePHP - PullRequest
3 голосов
/ 24 октября 2010

Идея довольно проста.Если вы не вошли в систему, у вас нет доступа ни к одной странице, кроме страницы регистрации и входа.Если вы вошли в систему, у вас есть доступ ко всем страницам, кроме страницы регистрации.

Теперь половина этого достигается с помощью компонента авторизации CakePHP.Это ограничивает доступ, когда он не зарегистрирован, и разрешает доступ при входе в систему.

Проблема, с которой я столкнулся при этом, заключалась в ограничении доступа к странице регистрации при входе в систему.Я пробовал разные методы, все с одинаковым результатом: страница регистрации была по-прежнему доступна.

Нужна помощь, поскольку я застрял с этой проблемой.

Вот часть моего кода (beforeFilter() в классе UsersController; 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 ]

2 голосов
/ 24 октября 2010
function register()
{
    if ($this->Auth->user())
    {
        $this->redirect('someOtherPage');
        // or exit;
    }
    //other stuff
}
2 голосов
/ 24 октября 2010

Попробуйте сделать так:

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