makc9I
@makc9I
фрилансер, web разработчик

Какие нужны права доступа для процессора 'resource/create' в modx?

Всем привет. Передо мной стояла задача обрабатывать экселевский файл и грузить товары в базу данных modx, где был установлен компонент mihishop2.

Я создал шаблон, в котором просто выводил форму для выбора файла. В шаблоне происходит проверка на авторизацию в админке менеджером или админом. Иначе форма не выводится.

60f529b518f57433016694.png

Менеджер грузит файл, жмет кнопку "проверить", далее я через ajax дергаю написанный процессор, который обрабатывает файл, грузит его на сервер в определенную папку с определенным именем и выводит некое представление пользователю, чтобы тот понял, что всё считалось корректно и экселевский файл нужного формата.

60f52babdc534341500111.png

После чего появляется кнопка "начать импорт", которая дергает уже другой процессор для импорта товаров из файла.
Делается это через modx->runProcessor('resource/create', $options);
Если подробней, то так:
//получаем массив артикулов
		foreach ($prods as $prod) {
			array_push($vendor_codes, $prod->get('article'));
		}
		// var_dump($vendor_codes);

		$count = 0;
		$duplicate = 0;

		//проходимся по товарам из эксель файла, сравнивая артикулы с имеющимися, если совпадение есть, не добавляем
		foreach ($array as $item) {
			//если еще нет в базе, добавляем
			if(!in_array($item['vendor_code'], $vendor_codes)) {
				$options = array();
				//создаем товар
				$options = array(
					'class_key' => 'msProduct',
					'pagetitle' => $item['title'],
					'parent' => $category,
					'template' => 2,
					'show_in_tree' => 0,
					'alias' => $item['vendor_code'],

					'price' => $item['price'],
					'old_price' => $item['old_price'],
					'favorite' => 0,
					'popular' => 0,
					'color' => array($item['color']),
					'article' => $item['vendor_code'],
					'weight' => $item['weight'],
					'made_in' => $item['country'],
					'serial_num' => $item['barcode'],
					'package_width' => $item['width'],
					'package_height' => $item['height'],
					'package_length' => $item['length'],
					'guarantee' => $item['guarantee'],
					'shelf_life' => $item['shelf_life'],
					'life_time' => $item['life_time'],
					'content' => $item['description']
				);

				//добавляем доп опции в зависимости от категории
				if ($category == 10) {
					// если термосы
					$options['options-volume'] = $item['volume'];
				}

				// var_dump($options);
				// exit();

				$response = $this->modx->runProcessor('resource/create', $options);
				$count++;
			}else{
				$duplicate++;
			}
		}


И этот код работает, процессор выдает количество загруженных файлов и количество уже существовавших в базе. Сверяет по артикулу.
Загвоздка лишь одна, если я залогинен как администратор, то всё работает. Файлы обрабатываются, данные пишутся в БД, товары появляются. Если я залогинен как менеджер, то визуально вебморда никак не отличается, процессор обработки экселевского файла отрабатывает, файл грузится куда надо и следующий процессор импорта с ним работает. Ответ от процессора так же приходит, он считает, сколько товаров было загружено. Есть только одна проблема, товары не добавляются по факту. Их нет в БД. Ловлю ошибку "permission_denied_processor".
Причем, не помогает даже добавление прав доступа администратора пользователю "менеджер".
Каких прав не хватает, ума не приложу.
  • Вопрос задан
  • 194 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы