Процессор resource/create или контроль доступа.

Доброе время суток. Задача с фронтэнда дать посльзователям создавать ресурс. Делаем формочку Formit, пишем под нее свой хук, в котором все из POST загоняем в процессор и создаем.
И все чудесно работает, если мы залогинены как админ. Что сделать, что бы неавторизованные пользователи могли создавать ресурсы?
$response = $modx->runProcessor('resource/create', array(
        'pagetitle' => $title,
        'longtitle' => $longtitle,
        'introtext' => $name,
        'content' => nl2br($content),
        'template' => $template,
        'publishedon' => DateTime::createFromFormat('Y-m-d', $date),
	'published' => 0,
	'parent' => $parent));
if ($response->isError()) {
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'There was a problem to create resource...');
    $modx->log(xPDO::LOG_LEVEL_ERROR, $response->getMessage());
    return $modx->error->failure($response->getMessage());
}


Попробовал создать пользователя с админ правами и проходить авторизацию в скрипте.

// Логинимся в админку
$response = $modx->runProcessor('security/login', array('username' => 'frontend', 'password' => 'C6rRpPQm'));
if ($response->isError()) {
    $modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
    return 0;
}
$modx->initialize('mgr');


// Создаем ресурс
$response = $modx->runProcessor('resource/create', array(
        'pagetitle' => $title,
        'longtitle' => $longtitle,
        'introtext' => $name,
        'content' => nl2br($content),
        'template' => $template,
        'publishedon' => DateTime::createFromFormat('Y-m-d', $date),
	'published' => 0,
	'parent' => $parent));
if ($response->isError()) {
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'There was a problem to create resource...');
    $modx->log(xPDO::LOG_LEVEL_ERROR, $response->getMessage());
    return $modx->error->failure($response->getMessage());
}
Вот тут вообще ад. Прокликиваем несколько раз — и пропускает. Иногда пускает иногда нет.

Как это сделать? Может можно неавторизованным дать права на создание? Если да — то как? Вопросов много, ответа пока нет(.

p.s. Сложность всего этого в том, что это все крутится в интранете. И доступы до админки не дать посмотреть, и страничку не увидите. Общаться можем только кусками кода и скринами.
Vladimir Alekhin
01 февраля 2018, 10:37
modx.pro
4 361
0

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

Михаил
01 февраля 2018, 14:21
0
Да не надо нигде логинится. Процессор создаст ресурс в любом случае:
/**
 * Creates a resource.
 *
 * @param string $pagetitle The page title.
 * @param string $content The HTML content. Used in conjunction with $ta.
 * @param integer $template (optional) The modTemplate to use with this
 * resource. Defaults to 0, or a blank template.
 * @param integer $parent (optional) The parent resource ID. Defaults to 0.
 * @param string $class_key (optional) The class key. Defaults to modDocument.
 * @param integer $menuindex (optional) The menu order. Defaults to 0.
 * @param string $variablesmodified (optional) A collection of modified TVs.
 * Along with $tv1, $tv2, etc.
 * @param string $context_key (optional) The context in which this resource is
 * located. Defaults to web.
 * @param string $alias (optional) The alias for FURLs that this resource is
 * designated to.
 * @param integer $content_type (optional) The content type. Defaults to
 * text/html.
 * @param boolean $published (optional) The published status.
 * @param string $pub_date (optional) The date on which this resource should
 * become published.
 * @param string $unpub_date (optional) The date on which this resource should
 * become unpublished.
 * @param string $publishedon (optional) The date this resource was published.
 * Defaults to time()
 * @param integer $publishedby (optional) The modUser who published this
 * resource. Defaults to the current user.
 * @param json $resource_groups (optional) A JSON array of resource groups to
 * assign this resource to.
 * @param boolean $hidemenu (optional) If true, The resource will not show up in
 * menu builders.
 * @param boolean $isfolder (optional) Whether or not the resource is a
 * container of resources.
 * @param boolean $richtext (optional) If true, MODX will render the available
 * RTE for editing this resource.
 * @param boolean $donthit (optional) (deprecated) If true, MODX will not log
 * visits on this resource.
 * @param boolean $cacheable (optional) If false, the resource will not be
 * cached.
 * @param boolean $searchable (optional) If false, the resource will not appear
 * in searches.
 * @param boolean $syncsite (optional) If false, will not empty the cache on
 * save.
 *
 * @package modx
 * @subpackage processors.resource
 */
    Vladimir Alekhin
    01 февраля 2018, 14:26
    0
    <?php
    // Сниппет будет получать данные из формы методом POST
    $longtitle   =  $_POST['name'];
    $title       =  $_POST['idea-tag'];
    $name        =  $_POST['pagetitle'];
    $content     =  $_POST['description'];
    $date        =  $_POST['date'];
    $departament =  $_POST['departament'];// Это значение будем заносить
                                          // в TV-параметр color
    $function    =  $_POST['function'];// Это значение будем заносить
                                          // в TV-параметр color
    $phone       =  $_POST['phone'];// Это значение будем заносить
                                          // в TV-параметр color
    $template    =  $_POST['template']; 
    
    // Если некоторые значения не будут указаны,
    // они будут установлены по умолчанию
    $parent = 30;
    if (!$template)    $template = 4;
    
    // Логинимся в админку
    $response = $modx->runProcessor('security/login', array('username' => 'frontend', 'password' => 'C6rRpPQm'));
    if ($response->isError()) {
        $modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
        return 0;
    }
    $modx->initialize('mgr');
    
    
    // Создаем ресурс
    $response = $modx->runProcessor('resource/create', array(
            'pagetitle' => $title,
            'longtitle' => $longtitle,
            'introtext' => $name,
            'content' => nl2br($content),
            'template' => $template,
            'publishedon' => DateTime::createFromFormat('Y-m-d', $date),
    	'published' => 0,
    	'parent' => $parent));
    if ($response->isError()) {
        $modx->log(xPDO::LOG_LEVEL_ERROR, 'There was a problem to create resource...');
        $modx->log(xPDO::LOG_LEVEL_ERROR, $modx->error->failure($response->getMessage()));
        $modx->log(xPDO::LOG_LEVEL_ERROR, $response->getMessage());
        return $modx->error->failure($response->getMessage());
    }
    Тогда что может генерировать ошибку permission.

    [2018-02-01 10:00:51] (ERROR @ /var/www/html/core/cache/includes/elements/modsnippet/60.include.cache.php : 35) There was a problem to create resource...
    [2018-02-01 10:00:51] (ERROR @ /var/www/html/core/cache/includes/elements/modsnippet/60.include.cache.php : 36) Array
    [2018-02-01 10:00:51] (ERROR @ /var/www/html/core/cache/includes/elements/modsnippet/60.include.cache.php : 37) permission_denied
    Алексей Ерохин
    01 февраля 2018, 16:31
    1
    0
    1 вариант. Делать без процессора через newObject
    2 вариант. Сделать политику на основе AdministratorTemplate, включить нужные разрешения — для создания документа new_document, дать доступ анонимам к контексту web c этой политикой, и еще могут понадобиться add_children, new_document_in_root, publish_document
      Vladimir Alekhin
      01 февраля 2018, 17:18
      0
      Спасибо, попробуем.
        Valentin
        20 декабря 2019, 20:19
        0
        Удалось ли решить проблему? столкнулся с той же бедой.
          Андрей
          30 января 2020, 08:12
          0
          Настройки контекста -> Права доступа -> Назначить группе пользователей политику доступа Content Editor
            Андрей
            31 января 2020, 09:35
            0
            в самой Политике добавить в разрешенные действия «Публиковать ресурсы»
            Или, еще лучше, создать свою Политику со списком необходимых разрешенных действий
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7