Блог для вебмастеров и разработчиков
06 марта 2016, 13:46

Плагин Modx Revolution: Авторизация в нескольких контекстах сразу

Плагин Modx Revolution: Авторизация в нескольких контекстах сразу

Столкнулся с такой задачей, при авторизации в админке modx revolution нужно было автоматически авторизовать пользователя на сайте, это разные контексты и для каждого нужно выполнять свою авторизацию. Но это было лишним и нужно было авторизоваться одним махом везде. Полазив в поисках информации был найден плагин, который выполнял поставленную задачу, но при выходе из админки, на сайте пользователь все равно оставался авторизованным и при заходе в админку другим пользователем на сайте оставался авторизованным прошлый пользователь.

Поковыряв документацию мной был изменен плагин, так что он срабатывает при заходе и при выходе, а также его можно будет использовать и для другой схемы — авторизовался на сайте и автоматически в админке.

  1. Создаем новый плагин c именем AutoLogin:

    Создаем новый плагин c именем AutoLogin

  2. В поле «Код плагина (php)» вставляем код:

    • для схемы авторизация в админке — автоматически на сайте:

      if ($modx->event->name == 'OnWebPageInit') {
          if (!$modx->user->hasSessionContext('web') && $modx->user->hasSessionContext('mgr') && $modx->user->isMember('Administrator')) {
              $modx->user->addSessionContext('web');
          } elseif ($modx->user->hasSessionContext('web') && !$modx->user->hasSessionContext('mgr') && $modx->user->isMember('Administrator')) {
              $modx->user->removeSessionContext('web');
          }
      }
      

    • для схемы авторизация на сайте — автоматически в админке:

      if ($modx->event->name == 'OnWebPageInit') {
          if (!$modx->user->hasSessionContext('mgr') && $modx->user->hasSessionContext('web') && $modx->user->isMember('Administrator')) {
              $modx->user->addSessionContext('mgr');
          } elseif ($modx->user->hasSessionContext('mgr') && !$modx->user->hasSessionContext('web') && $modx->user->isMember('Administrator')) {
              $modx->user->removeSessionContext('mgr');
          }
      }
      

  3. Выбираем событие OnWebPageInit, при котором должен срабатывает плагин:

    Выбираем событие OnWebPageInit, при котором должен срабатывает плагин

  4. Сохраняем плагин. Плагин сразу начинает работать.

Название плагину можно указать любое, значения не имеет. Данный код плагина работает только для администраторов, если нужно чтобы код работал для других групп пользователей, добавьте эту группу в проверку, по такому типу:

if ($modx->event->name == 'OnWebPageInit') {
    if (!$modx->user->hasSessionContext('web') && $modx->user->hasSessionContext('mgr') && $modx->user->isMember('Administrator') && $modx->user->isMember('Manager')) {
        $modx->user->addSessionContext('web');
    } elseif ($modx->user->hasSessionContext('web') && !$modx->user->hasSessionContext('mgr') && $modx->user->isMember('Administrator') && $modx->user->isMember('Manager')) {
        $modx->user->removeSessionContext('web');
    }
}

Добавляем && $modx->user->isMember('Administrator') и указываем вместо Administrator название нужной нам группы.
Комментарии ()
    Добавить комментарий