Ошибка SQL-запроса при создании ресурса
Версия MODX Revolution 2.5.8-pl
Полный лог ошибки:
Когда происходит:
Ошибка происходит при создании/редактировании материалов от пользователя наделенного «Неограниченными права», исключение составляет «Администратор по умолчанию» — самый первый пользователь.
Причина:
Проблема возникает из-за того, что пользователь из под которого работают, хоть и обладает неограниченными права, но не был добавлен в какую-то из групп пользователей и из-за отсутствия должной проверки при составлении запроса в движке MODX происходит SQL-ошибка.
Решение:
А вот и сам проблемный код:
manager\controllers\default\resource\create.class.php
Полный лог ошибки:
[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-ошибка.
Решение:
- Заходим под пользователей обладающего неограниченными правами или правами категории user и usergroup.
- Находим проблемного пользователя и открываем его.
- Переходим на вкладку «Права доступа»
- Нажимаем «Добавить пользователя в группу»
- Выбираем желаемую группу (Administrator) и необходимую роль (Super User)
- Нажимаем «Сохранить»
- Перезагружаем права пользователей (Управление->Перезагрузить права пользователей)
- Завершаем все сеансы (Управление->Завершить все сеансы) или выходим из панели проблемного пользователя
А вот и сам проблемный код:
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);
Комментарии: 1
Спасибо, очень помогло устранить непонятную ошибку.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.