Как ограничить сохранение данных в БД для пользователя, когда администратор деактивировал их в cakephp3.x? - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно решение, в котором я могу запретить пользователю сохранять любые данные, когда он деактивирован администратором.Предположим, что пользователь активен на странице, где он собирается сохранить форму, но в то же время администратор деактивировал его.поэтому теперь, когда он пытается сохранить форму, он должен быть перенаправлен на страницу входа с надписью «Ваша учетная запись была деактивирована, обратитесь в службу поддержки», не сохраняя данные.Я работаю в CakePHP 3.x.Я пытался использовать beforeFilter для этого.Но это деактивирует пользователя, но также он может сохранять данные.

1 Ответ

0 голосов
/ 14 сентября 2018

У меня была похожая ситуация.Я добавил пользовательский искатель к компоненту 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 () в контроллере приложения

...