Авторизация админа во фронте

Добрый день! Когда то встречал это решение но сейчас не могу. Как сделать так чтобы администратор автоматически авторизовался на сайте когда авторизован в админке. Для авторизации использую office.
Заранее спасибо
wgame
23 января 2015, 11:21
modx.pro
5
2 902
0

Комментарии: 16

Алексей Карташов
23 января 2015, 19:14
2
0
switch ($modx->event->name) {
  case 'OnWebPageInit':
    if ($modx->context->key == 'mgr') {
      return;
    }

    /** авторизовывает админа в админке (если он не авторизован на фронте, и является администратором) */
    if (!$modx->user->hasSessionContext('mgr') && $modx->user->hasSessionContext($modx->context->key) && ($modx->user->get('sudo') || $modx->user->isMember('Administrator'))) {
      $modx->user->addSessionContext('mgr');
    }

    /** авторизовывает на фронте любого юзера, который авторизован в админке */
    if ($modx->user->hasSessionContext('mgr') && !$modx->user->hasSessionContext($modx->context->key)) {
      $modx->user->addSessionContext($modx->context->key);
    }

    break;
}
    Алексей Карташов
    23 января 2015, 21:37
    0
    *(если он авторизован на фронте, и является администратором)
      wgame
      31 января 2015, 22:15
      0
      Сделал как все написали, обновил кеш, и теперь вообще не могу войти в админку ((
        Алексей Карташов
        31 января 2015, 22:32
        0
        Чтобы попасть в админку, зайдите через phpmyadmin а свою базу, в таблице modx_site_plugins (вроде так называется) найдите это плагин, запомните его id, потом в таблице modx_pluginevents (тоже как-то так называется) удалите записи, у которых поле plugin_id равен id вашего плагина. И очистите кеш, удалив папку /core/cache.

        А лучше лождитесь спать, отдыхайте, а завтра я вам точно скажу названия таблиц и столбцов. Где-то после обеда.

        И завтра же подумаем как нормпльно завести это плагин на вашем сайте)
    wgame
    23 января 2015, 21:38
    0
    спасибо вам большое, подскажите еще один момент это как я понял плагин нужно создать или где то в коде прописать
      Алексей Карташов
      23 января 2015, 22:21
      0
      Создаёте плагин, этот код вставляете в него, а затем во вкладке «Системные события» в большом и длинном списке ищете «OnWebPageInit», отмечаете чекбокс напротив него и сохраняете. Вуаля)
        wgame
        23 января 2015, 22:32
        0
        спасибо вам большое за развернутый ответ
          Алексей Карташов
          23 января 2015, 22:39
          0
          Не за что)

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

          Если автологин в админку не нужен, то первый блок if {} лучше закомментировать (тот, который «авторизовывает админа в админке»):
          //    if (!$modx->user->hasSessionContext('mgr') && $modx->user->hasSessionContext($modx->context->key) && ($modx->user->get('sudo') || $modx->user->isMember('Administrator'))) {
          //      $modx->user->addSessionContext('mgr');
          //    }
            wgame
            23 января 2015, 22:47
            0
            ясно спасибо
              Василий Столейков
              26 января 2015, 10:27
              0
              разлогиниться при таком подходе, практически нереально
              Я бы так не сказал. Просто в том же Office указываешь &addContexts — все контексты, в том числе и админки (например &addContexts=`web,mgr`)
                Алексей Карташов
                26 января 2015, 12:07
                0
                С помощью Office'а можно залогиниться в админке с фронтенда, но не наоборот.
                  Василий Столейков
                  26 января 2015, 12:12
                  1
                  0
                  Точно, я забыл. Я использовал для этого плагин. Вот мой вариант плагина:
                  <?php
                  $currentSiteGroup = $modx->getOption("multisite_site_group");
                  if(empty($currentSiteGroup)) return;
                  $currentContext = $modx->context->get("key");
                  $currentContextSettings = $modx->getCollection('modContextSetting', array('key' => "multisite_site_group", "value" => $currentSiteGroup));
                  foreach($currentContextSettings as $currentContextSetting)
                  {
                      $contextKey = $currentContextSetting->get('context_key');
                      if($contextKey!="mgr" && $contextKey!=$currentContext)
                      {
                          if($user)
                          {
                              if($modx->event->name=="OnWebLogout")
                              {
                                  $modx->user->removeSessionContext($contextKey);
                              }
                              else if($modx->event->name=="OnWebLogin")
                              {
                                  $modx->user->addSessionContext($contextKey);
                                  $_SESSION['modx.'.$contextKey.'.session.cookie.lifetime']=$attributes["lifetime"];
                              }
                          }
                      }
                  }
                  Галки на системных событиях: OnWebLogin и OnWebLogout
                    wgame
                    31 января 2015, 22:02
                    0
                    к сожалению данный вариант не сработал
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        16