Добавление пользователя в группу через процессор
Здравствуйте.
Стоит задача добавить пользователя в определённую группу.
Делаю потомка modUserUpdateProcessor, чтобы права переопределить:
Может кто-то подскажет, где я накосячил.
Стоит задача добавить пользователя в определённую группу.
Делаю потомка modUserUpdateProcessor, чтобы права переопределить:
require MODX_CORE_PATH.'model/modx/processors/security/user/update.class.php';
class kurspressUserUpdateProcessor extends modUserUpdateProcessor {
public $permission = '';
}
return 'kurspressUserUpdateProcessor';
Вот кусок кода, которым я хочу это сделать:$groups = array ();
foreach($_REQUEST['items'] as $v){
$group['usergroup'] = $v['id'];
$group['role'] = 'Member';
$groups[] = $group;
}
$options = array(
'groups'=>$groups,
'id'=>$user->id,
'username'=>$user->username,
'email'=>$email
);
// Запускаем кастомный процессор обновления юзера
$response = $modx->runProcessor('justclick/update',
$options,
array('processors_path' => MODX_CORE_PATH. 'components/kurspress/processors/'));
if ($response->isError()){
$errors = implode(', ', $response->getAllErrors());
$this->modx->log(modX::LOG_LEVEL_ERROR, '[Office] Unable to create user '.$email.'. Message: '.$errors);
}
Никаких ошибок не выдаётся, но пользователь в группу не добавляется.Может кто-то подскажет, где я накосячил.
Комментарии: 3
Office регистрирует юзеров, в группы, которые указаны в параметре &groups сниппета officeAuth.
Посмотри в processors/auth/create.class.php метод setUserGroups() — это то, что тебе нужно.
Посмотри в processors/auth/create.class.php метод setUserGroups() — это то, что тебе нужно.
Да, Василий, я и раньше смотрел твой код HA и office. Более того, когда писал свой процессор create, «стянул» у тебя этот метод. И в create пользователь в группы нормально добавляется. А вот в update почему-то нет, хотя ошибок никаких не выдаёт.
Тогда нужно было смотреть родной MODXывый /user/update.class.php. Вот код оттуда:
public function setUserGroups() {
$memberships = array();
$groups = $this->getProperty('groups',null);
if ($groups !== null) {
$primaryGroupId = 0;
/* remove prior user group links */
$oldMemberships = $this->object->getMany('UserGroupMembers');
/** @var modUserGroupMember $membership */
foreach ($oldMemberships as $membership) { $membership->remove(); }
/* create user group links */
$groupsAdded = array();
$groups = is_array($groups) ? $groups : $this->modx->fromJSON($groups);
$idx = 0;
foreach ($groups as $group) {
if (in_array($group['usergroup'],$groupsAdded)) continue;
$membership = $this->modx->newObject('modUserGroupMember');
$membership->set('user_group',$group['usergroup']);
$membership->set('role',$group['role']);
$membership->set('member',$this->object->get('id'));
$membership->set('rank',isset($group['rank']) ? $group['rank'] : $idx);
if (empty($group['rank'])) {
$primaryGroupId = $group['usergroup'];
}
$memberships[] = $membership;
$groupsAdded[] = $group['usergroup'];
$idx++;
}
$this->object->addMany($memberships,'UserGroupMembers');
$this->object->set('primary_group',$primaryGroupId);
}
return $memberships;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.