resource/create API в CRON

Здравствуйте!

Наверняка вопрос «избитый»
Есть файл обновления по XML файл, если напрямую зайти через браузер, то все отрабатывает хорошо.
Но если по CRON(http запрос) запускать, то ресурсы не создаются, т.к. использую процессор resource/create, соответственно не хватает прав.

Вопрос, как обойти этот момент с правами? или все же придется через множественные $res->set('','')
Константин Ильин
30 ноября 2021, 09:37
modx.pro
260
0

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

Наумов Алексей
30 ноября 2021, 09:56
+1
Или создавать документы через API, в целом это нормальный вариант, главное создать правильно (заполнить все поля имею ввиду) и проследить, чтобы были обработаны ситуации, если у вас плагины есть на события создания/редактирования документов. Ну и кеш там почистить потом.
Или же в скрипте залогиниться в админку под пользователем-админом (менеджером), что как бы не особо безопасно…
Или же настроить права так, чтобы аноним мог создать страницу, что тоже не гуд.
    Константин Ильин
    30 ноября 2021, 10:24
    0
    Тоже про все это подумал, решил не рисковать с правами. Создавать процессоры и т.п.
    Сделал через newObject. Думал проблема будет с опциями, а там все просто оказалось.

    Кому пригодится
    // Нестандартные опции, cтандартные опции товара записываются вместе с полями товара
    $options['idads'] = $idADS;
    $options['floor'] = $floor;
    
    $newProduct = $modx->newObject('msProduct');
    $alias = $newProduct->cleanAlias($pagetitle);
    
    //Поля товара(ресурса)
    $arrRes = [
        'pagetitle' => $pagetitle,
        'published' => 1,
        'alias' => $alias,
        'content' => $ADS['description'] ?: '',
        'parent' => $parent,
        'show_in_tree' => 0,
        'template' => 20,
    
        //Стандартные опции товара
        'color' => ['синий', 'красный']
        'old_price' => 0,
        'price' => $ADS['price']['value'] ?: 0,
    ];
    
    // Можно было использовать fromArray()
    foreach ($arrRes as $field => $v){
        $newProduct->set($field,$v);
    }
    
    // Собственно, запись нестандартных опций, простая передача массива
    $newProduct->set('options', $options);
    
    // сохраняем
    $newProduct->save();
    Сейчас проблема с загрузкой изображений gallery/upload, там тоже через процессор, видимо тоже права, разбираться надо
      Павел Бигель
      30 ноября 2021, 14:26
      0
      Так делать не стоит. Используйте все же процессоры
      Для того чтобы права появились, используйте security/login процессор
        Константин Ильин
        30 ноября 2021, 17:24
        0
        Есть ли ссылки примеры?

        Я просто не совсем понимаю, если у меня скрипт будет автоматически логинится, то будет получать права. Он доступен через урл, напрямую. Т.е. «Иван» зайдет по адресу и получит сессию с правами?
        и будет ли работать этот прием для CRON
          Павел Бигель
          30 ноября 2021, 18:22
          0
          Ссылок/примеров в интернете хватает по этому запросу

          Я просто не совсем понимаю, если у меня скрипт будет автоматически логинится, то будет получать права. Он доступен через урл, напрямую. Т.е. «Иван» зайдет по адресу и получит сессию с правами?
          и будет ли работать этот прием для CRON
          Для этого файл закрывают средствами вебсервера
            Наумов Алексей
            30 ноября 2021, 18:23
            +1
            Есть в miniShop2 скрипт для импорта из csv

            Он же умеет создавать ресурсы как при запуске из браузера, так и в режиме запуска из командной строки.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6