BlackCat Я бы тебе рекомендовал не делать проверку на то опубликована запись или нет.

Я эту проверку в официальной документации нашёл. Не помню что там искал, но напоролся на пример что в твиге к форичу можно добавить такую проверку. Там было именно на публикацию проверка.

reazzon Отвечая на твой вопрос, все просто, тебе ответил Boarworm я лишь покажу пример кода:

Я так понимаю для этого нужно ставить плагин User? Или в ядре CMS-ки это уже есть?

  • reazzon ответили на это сообщение.

    Koresh Если только backend то плагин ставить не нужно. Он к этому не относится.

    • Koresh ответили на это сообщение.

      reazzon На фронтенд. Хочу если материал не опубликованный чтобы посетители его не видели, а я как админ мог посмотреть.

        Koresh Я неправильно выразился, только backend юзер, я понимаю что речь идет о frontend. Backend Auth и FrontEnd Auth - это две разные вещи. Первой не нужны плагины, чтобы взаимодействовать с ней везде, второй нужен - RainLab.User.

        • Koresh ответили на это сообщение.

          Koresh Любой на выбор rainlab.user или lovata.buddies.
          Просто будет у тебя два условия в конструкции через and

          reazzon Я неправильно выразился, только backend юзер, я понимаю что речь идет о frontend. Backend Auth и FrontEnd Auth - это две разные вещи. Первой не нужны плагины, чтобы взаимодействовать с ней везде, второй нужен - RainLab.User.

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

          • BlackCat ответили на это сообщение.

            Koresh Нет не нужно ничего ставить, backend user из коробки

            В компоненте плагина в файле \plugins\octoclub\tutorial\components\item\default.htm просто вставил

            {% if app.user %}
                Авторизован
            {% elseif not app.user %}
                Неавторизован
            {% endif %}

            В админке я авторизован. На фронтенде сайта вижу Неавторизован.
            В админке я под пользователем который создан при установке CMS.
            В настройках захожу в Администраторы, у пользователя под которым я сижу (он у меня один) обозначено в ГРУППЫ - Owners, РОЛЬ - Developer.

            Может где то в конфигах есть настройка на авторизацию вместе с фронтом? Или может какие сессии нужно добавлять? Или у меня пользователь с неправильными правами?

            • BlackCat ответили на это сообщение.

              Koresh Попробуй dump(app.user), посмотри, что там есть. Если ничего непонятно, то dump(app.user.toArray()) и увидишь поля на которые можно подвесить условия, хотя, по-моему, один факт того, что переменная не пустая уже является условием.

              Но в любом случае посмотри. Либо еще как вариант:

              {% if app.user is not empty %}
              То есть проверка если пользователь не пустой

              • Koresh ответили на это сообщение.

                BlackCat Попробуй dump(app.user), посмотри, что там есть.

                Выводит null

                BlackCat dump(app.user.toArray())

                NULL

                В конфигах искал настройки - ничего такого не увидел.
                Есть вот такое в \config\cms.php:

                'backendForceRemember' => true,

                В \config\session.php

                'driver' => 'file',
                'lifetime' => 120,
                'expire_on_close' => false,
                'encrypt' => false,
                'files' => storage_path('framework/sessions'),
                'connection' => null,
                'table' => 'sessions',
                'lottery' => [2, 100],
                'cookie' => 'october_session',
                'path' => '/',
                'domain' => null,
                'secure' => false,
                'same_site' => null,

                Я в админке как залогинился при установке CMS, так больше и не выходил из неё. Захожу из закладки - меня сразу залогиненного впускает.
                Плагин User я не ставил. К страницам сессий не добавлял.

                • reazzon ответили на это сообщение.

                  Koresh Делай по другому.

                  В компоненте, или в секции "Код" твоей страницы, передай перменную в TWIG.

                  if (\BackendAuth::check()){
                      $this->page['backend_user'] = true;
                  }

                  и в TWIG уже можно

                  {% if backend_user %}
                      // Пользователь администратор сайта.
                  {% endif %}
                  • Koresh и bogdan ответили на это сообщение.

                    reazzon Делай по другому.

                    Спасибо! Так работает. Проверил разлогинился/залогинился в админке - условие отрабатывает правильно.

                    Единственное, что проверку if (\BackendAuth::check()) наверное нужно внутри какой то функции делать onRun, onStart или onEnd. Если просто вставить - вызывает ошибку.
                    Я пока в onRun плагина добавил в файле \plugins\octoclub\tutorial\components\Item.php. Наверное так же и для категорий сделаю.

                      Koresh Да, именно про onRun, onStart или onEnd я и имел ввиду)

                      Koresh По идее так правильно. Но если по быстрому нужно, то в секции кода пишешь
                      function onStart(){
                      /* тут код получения user и прочего, почти то же самое что в onRun() плагина */
                      }

                      BlackCat Я бы тебе рекомендовал не делать проверку на то опубликована запись или нет.
                      Проверки на публикацию лучше выносить в scope метод

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

                      Исправил так:

                      $admin = false;
                      
                      if (\BackendAuth::check()) {
                          $this->page['admin'] = true;
                          $admin = true;
                      }
                      
                      if ($admin) {
                          $this->page['items'] = \OctoClub\Tutorial\Models\Item::orderBy('name', 'asc')->paginate($this->property('items'));
                      }
                      else {
                          $this->page['items'] = \OctoClub\Tutorial\Models\Item::where('published', 1)->orderBy('name', 'asc')->paginate($this->property('items'));
                      }

                      В твиге проверку на published == 1 убрал. Теперь работает правильно.

                      год спустя

                      reazzon код немного иначе должен выглядеть, а так всё отлично - спасибо за Ваш ответ!

                      if (BackendAuth::check()){
                          $this['backend_user'] = true;
                      }
                      • reazzon ответили на это сообщение.

                        bogdan то что отправляется на страницу - дело проектное и не играет сути)