Сейчас администратор при редактировании чьей-то записи не может указать группу в которой не состоит сам. Соответственно если запись была привязана к чужой группе, то для группы она теряется. Если указание группы для записи обязательно, то и вовсе группа этой записи меняется.
Не ахти сформулировал, но кто сталкивался поймет.
В идеале если пользователь имеет права на редактирование всех записей, то он должен иметь возможность указать любую группу. Наверное...
Короче, для себя я пока прикрутил костыль, который дает такую возможность администраторам и модераторам. Когда столкнусь с этим вопросом снова и буду чуток повыспавшись, постараюсь придумать, что-то более кошерное. Если кто-то не придумает это раньше.
Сам костыль:
В файле /system/controllers/groups/model.php меняем строку 299:
на:
* Указанный выше код оставлен для тех кто возможно успел уже его внести в свой проект, чтобы было проще исправить обратно.
При указанном в спойлере выше решении возникают проблемы в других местах. Нпример, при удалении пользователя администратором во всех группах декрементится (-1) счетчик участников, а не только в группах где пользователь в действительности является участником.
Следуя совету @SmartControl, полез в экшен content/item_edit и content/item_add. К сожалению через хук внести нужные изменения для всех типов контента не получается, т.к. объект формы передается для изменения только в "content_{$ctype['name']}_form". Так что пока по прежнему только костыль. В тех экшенах где нам это требуется, меняем:
на:
Или если вам достаточно, чтобы просто не сбрасывались привязки к группам, то можно подтягивать только группы автора записи. Для этого в экшене content/item_edit меняем все ту же строку:
на:
[/code]
Не ахти сформулировал, но кто сталкивался поймет.
В идеале если пользователь имеет права на редактирование всех записей, то он должен иметь возможность указать любую группу. Наверное...
Короче, для себя я пока прикрутил костыль, который дает такую возможность администраторам и модераторам. Когда столкнусь с этим вопросом снова и буду чуток повыспавшись, постараюсь придумать, что-то более кошерное. Если кто-то не придумает это раньше.
Сам костыль:
$this->filterEqual('user_id', $user_id);
$user = cmsUser::getInstance(); $this->filterEqual('user_id', $user_id); }
public function run(){ if(!$this->cms_user->is_admin){ cmsCore::error404(); } $this->model->selectOnly('id'); $groups = $this->model->get('groups'); foreach($groups as $group){ $ids = $this->model_groups->getMembersIds($group['id']); } }
Следуя совету @SmartControl, полез в экшен content/item_edit и content/item_add. К сожалению через хук внести нужные изменения для всех типов контента не получается, т.к. объект формы передается для изменения только в "content_{$ctype['name']}_form". Так что пока по прежнему только костыль. В тех экшенах где нам это требуется, меняем:
$groups = $groups_model->getUserGroups($this->cms_user->id);
if($this->cms_user->is_admin){ $groups_model->select('g.id', 'id'); $groups_model->select('g.*'); $groups_model->joinInner('groups', 'g', 'g.id = i.group_id'); $groups_model->orderBy('g.title'); $groups = $groups_model->get('groups_members', function($group, $model){ $group['slug'] = $group['slug'] ? $group['slug'] : $group['id']; return $group; }); }else{ $groups = $groups_model->getUserGroups($this->cms_user->id); }
$groups = $groups_model->getUserGroups($this->cms_user->id);
if($this->cms_user->is_admin){ $groups = $groups_model->getUserGroups($item['user_id']); }else{ $groups = $groups_model->getUserGroups($this->cms_user->id); }
Реклама #
SmartControl 6 лет назад #
SmartControl 6 лет назад #
Иван Шкута 6 лет назад #
Эх, не люблю я вносить изменения в ядро и не зря!!!