У меня в контроллере для студентов есть следующая функция isAuthorized ():
function isAuthorized() {
$studentId = $this->Auth->user('id');
$studentEmail = $this->Auth->user('email');
if ($this->Auth->user('active') == 1 && $this->Auth->user('level_complete') != 1) {
$this->Auth->loginRedirect = '/classrooms/view';
return true;
} elseif (!$this->Student->hasPayed($studentId)) {
$this->Session->write('Payment.student_id', $studentId);
$this->Session->write('Payment.student_email', $studentEmail);
$this->Session->write('Payment.examScore', $this->Student->getPlacementScore($studentId));
$this->Auth->logout();
$this->redirect(array('controller'=>'payments', 'action'=>'pay'));
} elseif ($this->Auth->user('level_complete') == 1) {
$this->Session->write('Payment.student_id', $studentId);
$this->Session->write('Payment.student_email', $studentEmail);
$this->Auth->logout();
$this->redirect(array('controller' => 'payments', 'action' => 'repay'));
} else {
$this->Auth->logout();
$this->redirect(array('controller' => 'students', 'action' => 'disabled'));
}
return false;
}
В основном, этот метод охватывает четыре возможных состояния:
- Пользователь активен и не прошел уровень = Авторизован
- Пользователь не заплатил = Не авторизован
- Пользователь прошел уровень и должен снова заплатить = Не авторизован
- Учетная запись пользователя не активна
Проблема, с которой я столкнулся, заключается в том, что в моем заголовке есть форма входа в систему, и я могу войти с любого контроллера. Если я вхожу в систему из контроллера, отличного от Контроллера студентов, метод isAuthorized () не вызывается, и пользователь может войти в систему, даже если он не должен этого делать.
Есть идеи?
Редактировать: После проверки определения API метода isAuthorized () я думаю, что метод вызывается только тогда, когда запрашиваются действия от контроллера студентов. Где еще я мог бы реализовать эту логику тогда? Спасибо