Создание пользователя через api
Добрый вечер.
Помогите советом.
Пытаюсь создать пользователя, получив имя и и пароль из формы на фронтенде.
Через
Хочу сразу назначать его в определенную группу, для которой настроил права.
Перед сохранение объекта делаю
В базе данных поле primary_group получает значение 2 (идентификатор созданной мною группы)
однако по факту пользователь в эту группу не попадает. Это видно в админке у этого пользователя.
Я догадываюсь, что причина этого в том, что кроме группы пользователю нужно выдать еще и роль в группе, но как это сделать через api — не вижу.
И второй вопрос, он уже просто походу.
Изначально пробовал писать такие данные как email, fullname сразу в пользователя, но разобрался чуток и понял, что эти данные лежат в отдельной таблице. Это так называемый Profile. Для текущего пользователя я думаю его получить не сложно, наверняка он связан они к одному с пользователем. А вот чтобы получить его для любого пользователя и отредактировать я вижу только один способ через getObject. Но у этой таблицы нет класса своего. Как не прибегая к прямым запросам к базе, и при условии что мы не можем получить данные через
Помогите советом.
Пытаюсь создать пользователя, получив имя и и пароль из формы на фронтенде.
Через
$us =$modx->newObject('modUser');
Пользователь создается.Хочу сразу назначать его в определенную группу, для которой настроил права.
Перед сохранение объекта делаю
$us->set('primary_group', 2);
Сохраняю пользователя.В базе данных поле primary_group получает значение 2 (идентификатор созданной мною группы)
однако по факту пользователь в эту группу не попадает. Это видно в админке у этого пользователя.
Я догадываюсь, что причина этого в том, что кроме группы пользователю нужно выдать еще и роль в группе, но как это сделать через api — не вижу.
И второй вопрос, он уже просто походу.
Изначально пробовал писать такие данные как email, fullname сразу в пользователя, но разобрался чуток и понял, что эти данные лежат в отдельной таблице. Это так называемый Profile. Для текущего пользователя я думаю его получить не сложно, наверняка он связан они к одному с пользователем. А вот чтобы получить его для любого пользователя и отредактировать я вижу только один способ через getObject. Но у этой таблицы нет класса своего. Как не прибегая к прямым запросам к базе, и при условии что мы не можем получить данные через
$data = $modx->user->getOne('Profile');
потому что авторизован может быть совсем другой пользователь, работать с профилем? Комментарии: 16
Добавить пользователя в группу:
У профиля есть свой класс — modUserProfile. Он связан с modUser через поле internalKey
$us->joinGroup(2);
У профиля есть свой класс — modUserProfile. Он связан с modUser через поле internalKey
Спасибо Илья.
То что он связан да я вижу, а как вы узнали имя класса?
В таблицу user_attrubutes где хранятся данные профиля нет колонки classname.
И поделитесь бесценным опытом, а где Вы вообще находите информацию? Например о методе joinGroup?
Во всей официальной документации нет даже упоминания о таком методе.
docs.modx.com/search/search-results?search=joinGroup&id=1325
То что он связан да я вижу, а как вы узнали имя класса?
В таблицу user_attrubutes где хранятся данные профиля нет колонки classname.
И поделитесь бесценным опытом, а где Вы вообще находите информацию? Например о методе joinGroup?
Во всей официальной документации нет даже упоминания о таком методе.
docs.modx.com/search/search-results?search=joinGroup&id=1325
Вспомнил, что у Вас же на сайте видел вот такую табличку и еще вчера мог найти в ней имя класса
bobsguides.com/modx-object-full-reference.html#modUserProfile
Однако странно, что имя класса не прописано в самой таблице базы.
bobsguides.com/modx-object-full-reference.html#modUserProfile
Однако странно, что имя класса не прописано в самой таблице базы.
можно здесь посмотреть /core/model/schema/modx.mysql.schema.xml поиском по таблице
api.modx.com/revolution/2.2/ — api правда старовато уже немного, но в целом подойдет
api.modx.com/revolution/2.2/ — api правда старовато уже немного, но в целом подойдет
Спасибо.
добавил в сниппет
(ERROR @ /var/www/vh181962/data/www/site.ru/core/xpdo/om/xpdoobject.class.php: 811) modUserGroupMember: Attempt to set NOT NULL field member to NULL
У меня в IDE подключен в External Libraries и проиндексирован modx 2.6.1, однако попытка найти объявление этого метода (go to declaration) завершилась неудачей, он нигде не объявлен.
$us->joinGroup(2);
Пользователь создается, в группу не попадает, и в логе появилась ошибка(ERROR @ /var/www/vh181962/data/www/site.ru/core/xpdo/om/xpdoobject.class.php: 811) modUserGroupMember: Attempt to set NOT NULL field member to NULL
У меня в IDE подключен в External Libraries и проиндексирован modx 2.6.1, однако попытка найти объявление этого метода (go to declaration) завершилась неудачей, он нигде не объявлен.
Продолжу свой монолог.
Предположил, что этот метод все-таки существует (Уткин не ошибается))
я решил, что может его нельзя вызвать для еще не созданного пользователя.
В итоге сначала сохранил пользователя.
Затем получил его по имени и уже к нему применил — joinGrup();
Так сработало.
Предположил, что этот метод все-таки существует (Уткин не ошибается))
я решил, что может его нельзя вызвать для еще не созданного пользователя.
В итоге сначала сохранил пользователя.
Затем получил его по имени и уже к нему применил — joinGrup();
Так сработало.
core/model/modx/moduser.class.php
строка 668
строка 668
public function joinGroup($groupId,$roleId = null,$rank = null) {
...
}
Спасибо.
По тому, что пользователь добавился в группу, я понял что метод такой есть.
Значит phpstorm работает не совсем идеально и находит не все.
Ну и частично остается открытым вопрос, а как можно впервые узнать об этом методе.
Теперь у меня в голове останется заметка и в следующий раз я буду помнить, что что-то подобное есть.
Но как в первый раз узнать о нем… В документации на docs.modx.com я не увидел даже упоминания, хотя старался читать внимательно все что касается user.
Кстати ох и жуткая навигация на этом сайте. Очень сложно понять где ты сейчас и куда двигаться дальше…
По тому, что пользователь добавился в группу, я понял что метод такой есть.
Значит phpstorm работает не совсем идеально и находит не все.
Ну и частично остается открытым вопрос, а как можно впервые узнать об этом методе.
Теперь у меня в голове останется заметка и в следующий раз я буду помнить, что что-то подобное есть.
Но как в первый раз узнать о нем… В документации на docs.modx.com я не увидел даже упоминания, хотя старался читать внимательно все что касается user.
Кстати ох и жуткая навигация на этом сайте. Очень сложно понять где ты сейчас и куда двигаться дальше…
Вы лаконичны но это Вам к лицу.
Второй раз за сегодня меня посылают на этот сайт, а значит буду учить.
Спасибо.
Второй раз за сегодня меня посылают на этот сайт, а значит буду учить.
Спасибо.
по п.2
Ну так что же вы 2+2 не сложили?
Ну так что же вы 2+2 не сложили?
$user = $modx->getObject('modUser', $user_id);
$profile = $user->getOne('Profile');
Спасибо, я часто не умею складывать 2+2, такое бывает).
Но честно говоря мне кажется Ваш код не совсем верным.
На момент создания пользователя я не знаю его идентификатор.
А значит я не могу получить объект класса пользователь по id.
Вместо id можно было бы использовать username, поскольку имя на этом этапе мы уже знаем.
Но к своему стыду я еще 20 минут назад был уверен, что MODX позволяет заводить пользователей с одинаковыми именам, а значит выборка по username была бы некорректна. Но я был неправ. Оказывается имя должно быть уникальным.
Но честно говоря мне кажется Ваш код не совсем верным.
На момент создания пользователя я не знаю его идентификатор.
А значит я не могу получить объект класса пользователь по id.
Вместо id можно было бы использовать username, поскольку имя на этом этапе мы уже знаем.
Но к своему стыду я еще 20 минут назад был уверен, что MODX позволяет заводить пользователей с одинаковыми именам, а значит выборка по username была бы некорректна. Но я был неправ. Оказывается имя должно быть уникальным.
Хотя сам перечитал свой вопрос и понимаю, что на мой вопрос Вы дали правильный ответ.
Но чтобы при создании пользователя сразу заполнить и его профиль, придется делать выборку по username так как id мы не знаем.
Но чтобы при создании пользователя сразу заполнить и его профиль, придется делать выборку по username так как id мы не знаем.
Чтобы при создании заполнять профиль делаете так:
$profile=$modx->newObject('modUserProfile');
$profile->set('fullname', $fullname);
$profile->set('email', $email);
$user->addOne($profile);
$profile->save();
$user->save();
Да, это изящно.
Спасибо.
Спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.