Обновление ресурса через сервис
Делаю апи, которое в том числе обновляет ресурсы, и вот в методе обновления где нужно обновить данные вызываю $this->modx->runProcessor('resource/update', $data); в результате получаю permission_denied.
Подскажите как авторизовать анонимного пользователя?
Спасибо!
Подскажите как авторизовать анонимного пользователя?
Спасибо!
Комментарии: 6
Только права админа нужно дать.
$username = 'robot';
$password = 'Qd5ZsZdS';
$data = array(
'username' => $username,
'password' => $password,
'rememberme' => 1,
'login_context' => 'web',
);
$response = $modx->runProcessor('/security/login', $data);
if ($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'login error. Username: '.$username.', Message: '.$response->getMessage());
}
Ну и в конце лучше выйти:$response = $modx->runProcessor('/security/logout');
Можно проще
$this->modx->user = $this->modx->getobject('modUser', 1); // здесь любой пользователь из группы Администратор
$this->modx->runProcessor('resource/update', $data);
ну да, генерировать токен, передавать его в заголовке а дальше выбирать конкретного пользователя
пример выше работает только после перезагрузки страницы.
этот способ работает сразу.
пример выше работает только после перезагрузки страницы.
этот способ работает сразу.
а зачем через процессор? медленно же
зато быстро и надежно, ничего не сломается после обновления
Вот так:
<?php
//define('MODX_API_MODE', true);
//require 'index.php';
/* @var modX $modx */
//Дадим права админа навыполнение процессора
$modx->user = $modx->getObject('modUser', 1);
//Данные для обновления ресурса
$data = [
'id'=>1,
'introtext'=>'ццццццццццццц',
'alias'=>'index',
'context_key' => 'web',
'tvs' => true,// save tv
'tv3' => 'abc', //tv +id
];
//Запускаем процессор
$response = $modx->runProcessor('resource/update', $data);
if ($response->isError()) {
$out = $response->getMessage();
} else{
$out = $response->response;
}
var_dump($out);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.