CakePHP Auth - с помощью allow / deny, для чего фактически нужен Autorized? - PullRequest
2 голосов
/ 12 сентября 2011

Проверьте это:

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

function isAuthorized() {
    if ($this->Auth->user('role') != 'admin') {
        $this->Auth->deny('delete');
    }

    ...
}

(от: http://book.cakephp.org/view/1255/AuthComponent-Methods#deny-1258)

Это пример документации для isAuthorized. Зачем мне это нужно, если я могу просто установить условия в самом beforeFilter? похоже на лишний бесполезный код ..

1 Ответ

3 голосов
/ 12 сентября 2011

Это позволяет вам отделить вашу логику авторизации от другой логики, которая может находиться в вашем обратном вызове beforeFilter. Более того, поскольку это метод, вы можете воспользоваться преимуществами наследования, внедрив его в AppModel, а также переопределить или расширить функциональность отдельных контроллеров. Пример кода, который вы цитировали, на самом деле не отражает тот факт, что метод должен действительно возвращать true / false. Лучшим примером может быть авторизация доступа к страницам, маршрутизируемым администратором, для всего сайта, добавив что-то вроде этого в AppModel:

public function isAuthorized() {
    if (isset($this->params['admin']) && $this->Auth->user('role') == 'admin') {
        return true;
    }
    return false;
}
...