Ошибка SQL-запроса при создании ресурса

Версия MODX Revolution 2.5.8-pl

Полный лог ошибки:
[2014-01-24 08:47:48] (ERROR @ /manager/index.php) Encountered empty IN condition with key usergroup
[2014-01-24 08:47:48] (ERROR @ /manager/index.php) Error 42000 executing statement: 
Array
(
    [0] => 42000
    [1] => 1064
    [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') OR  ( `ProfileUserGroup`.`usergroup` IS NULL AND `UGProfile`.`active` = 1 )  )' at line 1
)

Когда происходит:
Ошибка происходит при создании/редактировании материалов от пользователя наделенного «Неограниченными права», исключение составляет «Администратор по умолчанию» — самый первый пользователь.

Причина:
Проблема возникает из-за того, что пользователь из под которого работают, хоть и обладает неограниченными права, но не был добавлен в какую-то из групп пользователей и из-за отсутствия должной проверки при составлении запроса в движке MODX происходит SQL-ошибка.

Решение:
  1. Заходим под пользователей обладающего неограниченными правами или правами категории user и usergroup.
  2. Находим проблемного пользователя и открываем его.
  3. Переходим на вкладку «Права доступа»
  4. Нажимаем «Добавить пользователя в группу»
  5. Выбираем желаемую группу (Administrator) и необходимую роль (Super User)
  6. Нажимаем «Сохранить»
  7. Перезагружаем права пользователей (Управление->Перезагрузить права пользователей)
  8. Завершаем все сеансы (Управление->Завершить все сеансы) или выходим из панели проблемного пользователя
Оставляю это здесь — вдруг кому-нибудь пригодиться.

А вот и сам проблемный код:
manager\controllers\default\resource\create.class.php
$userGroups = $this->modx->user->getUserGroups();
$c = $this->modx->newQuery('modActionDom');
$c->innerJoin('modFormCustomizationSet','FCSet');
$c->innerJoin('modFormCustomizationProfile','Profile','FCSet.profile = Profile.id');
$c->leftJoin('modFormCustomizationProfileUserGroup','ProfileUserGroup','Profile.id = ProfileUserGroup.profile');
$c->leftJoin('modFormCustomizationProfile','UGProfile','UGProfile.id = ProfileUserGroup.profile');
$c->where(array(
	'modActionDom.action' => 'resource/create',
	'modActionDom.name' => 'template',
	'modActionDom.container' => 'modx-panel-resource',
	'modActionDom.rule' => 'fieldDefault',
	'modActionDom.active' => true,
	'FCSet.active' => true,
	'Profile.active' => true,
));
$c->where(array(
	array(
		'ProfileUserGroup.usergroup:IN' => $userGroups,
		array(
			'OR:ProfileUserGroup.usergroup:IS' => null,
			'AND:UGProfile.active:=' => true,
                ),
	),
	'OR:ProfileUserGroup.usergroup:=' => null,
),xPDOQuery::SQL_AND,null,2);
/** @var modActionDom $fcDt see http://tracker.modx.com/issues/9592 */
$fcDtColl = $this->modx->getCollection('modActionDom',$c);
Alexey Medvedev
29 октября 2017, 19:00
modx.pro
1
2 677
+3

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

Алексей Суслов
05 сентября 2019, 07:27
0
Спасибо, очень помогло устранить непонятную ошибку.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1