Процессор resource/create или контроль доступа.
Доброе время суток. Задача с фронтэнда дать посльзователям создавать ресурс. Делаем формочку Formit, пишем под нее свой хук, в котором все из POST загоняем в процессор и создаем.
И все чудесно работает, если мы залогинены как админ. Что сделать, что бы неавторизованные пользователи могли создавать ресурсы?
Попробовал создать пользователя с админ правами и проходить авторизацию в скрипте.
Как это сделать? Может можно неавторизованным дать права на создание? Если да — то как? Вопросов много, ответа пока нет(.
p.s. Сложность всего этого в том, что это все крутится в интранете. И доступы до админки не дать посмотреть, и страничку не увидите. Общаться можем только кусками кода и скринами.
И все чудесно работает, если мы залогинены как админ. Что сделать, что бы неавторизованные пользователи могли создавать ресурсы?
$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. Сложность всего этого в том, что это все крутится в интранете. И доступы до админки не дать посмотреть, и страничку не увидите. Общаться можем только кусками кода и скринами.
Комментарии: 7
Да не надо нигде логинится. Процессор создаст ресурс в любом случае:
/**
* 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
*/
<?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
1 вариант. Делать без процессора через newObject
2 вариант. Сделать политику на основе AdministratorTemplate, включить нужные разрешения — для создания документа new_document, дать доступ анонимам к контексту web c этой политикой, и еще могут понадобиться add_children, new_document_in_root, publish_document
2 вариант. Сделать политику на основе AdministratorTemplate, включить нужные разрешения — для создания документа new_document, дать доступ анонимам к контексту web c этой политикой, и еще могут понадобиться add_children, new_document_in_root, publish_document
Спасибо, попробуем.
Удалось ли решить проблему? столкнулся с той же бедой.
Настройки контекста -> Права доступа -> Назначить группе пользователей политику доступа Content Editor
в самой Политике добавить в разрешенные действия «Публиковать ресурсы»
Или, еще лучше, создать свою Политику со списком необходимых разрешенных действий
Или, еще лучше, создать свою Политику со списком необходимых разрешенных действий
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.