Как сделать некоторые страницы недоступными, когда пользователь вошел в систему - PullRequest
0 голосов
/ 07 августа 2009

В CakePHP мы можем использовать $this->Auth->allow('someMethod');, чтобы сделать страницу видимой без входа в систему. Как сделать так, чтобы одна и та же страница не отображалась при входе пользователя в систему? Примером этого может быть страница регистра, которую мы хотим сделать доступной без входа пользователя ... но недоступной после входа пользователя.

Я положил $this->Auth->deny('someMethod') в isAuthorized(), но мне кажется, что если метод находится в списке разрешений, то isAuthorized не вызывается, когда мы пытаемся запустить эту страницу.

Любой вход? Спасибо

Ответы [ 3 ]

3 голосов
/ 07 августа 2009

Нет сложных правил, подобных встроенным в Cake Auth. Вам придется вручную проверять наличие подобных условий. Это очень просто:

// Controller
function register() {
    if ($this->Auth->user()) {
        $this->redirect(/* somewhere else */);
    }
}

Вопреки ответу mlevits, вам не нужно ничего хранить в сеансе, информация легко доступна из самого AuthComponent. http://book.cakephp.org/view/387/user

Есть также пример, как это сделать, динамически используя deny(), но это не так ясно в простом случае, как это ИМХО. http://book.cakephp.org/view/383/deny
Кроме того, deny() создает сообщение об ошибке («Вы не авторизованы для доступа к этому местоположению»), что, вероятно, не то, что вы хотите для удобства пользователя в этом случае.

0 голосов
/ 27 августа 2010

Вы можете проверить это в методе beforeFilter в AppController, чтобы разрешить проверку по всему приложению. Например:

<?php
class AppContoller extends Controller {
    var $components = array('Session', 'Auth');

    function beforeFilter(){
        $this->Auth->allow('register', 'home');
        // Check if current action allowed to access without authorization and User has login
        if(array_key_exists($this->params['action'], $this->Auth->allowedActions) && $this->Auth->user()){
            $this->redirect(/* somewhere else */);
        }
    }
}
?>

Конечно, вы можете также реализовать его в каком-то контроллере вместо AppController.

0 голосов
/ 07 августа 2009

EDIT:

Не знал, что CakePHP использовал другой синтаксис.

Затем вы можете использовать следующее для установки переменной Session:

$this->Session->write('user_id', '<some_user_name>');

Затем используйте это, чтобы перенаправить пользователя, если он вошел в систему:

if ($this->Session->check('user_id'))
{
    $this->redirect('http://google.com');
}

А затем для уничтожения сеанса используйте:

$this->Session->destroy()

Дополнительная информация о сессиях CakePHP

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...