У меня была похожая ситуация.Я добавил пользовательский искатель к компоненту auth, чтобы запретить деактивированным пользователям делать запросы, когда они были деактивированы, но это только мешало деактивированным пользователям входить в систему и НЕ немедленно ограничивать их от выполнения любого запроса.Это означало, что деактивированный пользователь все еще мог получить доступ к приложению до конца своего сеанса.(Много разрушений может быть вызвано недовольным деактивированным сотрудником, скажем, через 10 часов.)
Мое решение состояло в том, чтобы сказать компоненту auth использовать методы перехвата контроллера для авторизации. Информация о поваренной книге здесь
Контроллер приложения - Инициализация действия - Компонент аутентификации
$this->loadComponent('Auth', [
'authorize' => 'Controller', // ADDED THIS LINE
'authenticate' => [
'Form' => [
'finder' => 'active' // Custom finder to retrieve details for login of active users - for login only.
]
],
// Other auth component actions here
]);
И это то, что немедленно выводит пользователя из системы.
Контроллер приложения - isAuthorized
public function isAuthorized()
{
if ($this->checkActiveAndRole() === true) {
return true;
}
return false;
}
Контроллер приложения - checkActiveAndRole - (Упорядочено для этого поста)
private function checkActiveAndRole()
{
// Initialise and validate the id from auth component.
$id = $this->Auth->user('id');
// Select the users status and role.
$Users = TableRegistry::getTableLocator()->get('Users');
$query = $Users->find('statusRole', [
'id' => $id
]);
if ($query->isEmpty()) {
return false;
}
$status = 0;
foreach ($query as $row):
$status = $row->status;
endforeach;
// Check if the user is active.
if ($status === 0) {
return false;
}
return true;
}
И это сработало для меня.Т.е.: проверка активности пользователя на каждый запрос с помощью функции isAuthorized () в контроллере приложения