В идеале я хотел бы установить основную группу при приглашении пользователя в ту группу, которую я добавляю в приглашении, но не вижу способа сделать это. Есть ли какой-либо способ через API установить основную группу для пользователя?
С уважением
В идеале я хотел бы установить основную группу при приглашении пользователя в ту группу, которую я добавляю в приглашении, но не вижу способа сделать это. Есть ли какой-либо способ через API установить основную группу для пользователя?
С уважением
Думаю, вы можете обновить настройки пользователя через операцию updateUser:
Спасибо за подсказку — я попробовал её использовать — я обновил primary_group_name, primary_group_id и даже запись в массиве groups для него [‘primary_group’] = true — при вызове update_user я получаю 200, используя gem, но пока безрезультатно. Завтра я изучу это подробнее, чтобы понять, что именно идёт не так. Пока ничего очевидного я не заметил.
Вот код, который я запустил, и сервер вернул код 200:
client = DiscourseApi::Client.new("https://myforumurl.example.com")
client.api_key = 'an api key with global permissions for testing this'
client.api_username = 'my admin username -- I think this doesnt matter though'
user = client.user('joepowell')
user['primary_group_name'] = 'dojo'
user['primary_group_id'] = 42
# это группа 42 в массиве groups
user['groups'][2]['primary_group'] = true
client.update_user('joepowell', user)
Смотрите Реверс-инжиниринг API Discourse. Это самый надёжный способ разобраться в API, и он всегда актуален.
Отлично, спасибо :). Завтра утром, после того как сделаю, напишу здесь снова ![]()
Итак, я смог использовать следующий код на Ruby для обновления идентификатора основной группы. Похоже, что через gem это пока не поддерживается (я поискал в коде упоминания primary_group_id и не нашел ничего, что работало бы таким образом).
require 'curb'
http = Curl.put('https://yourforum.com/admin/users/###user_id###/primary_group?primary_group_id=###group_id###') do | http |
http.headers['Api-Key'] = 'your-api-key';
http.headers['Api-Username'] = 'your-api-username';
http.headers['Content-Type'] = 'application/x-www-form-urlencoded'
end
Думаю, допустимо использовать эти методы для отправки запросов к путям, которые не поддерживаются gem:
Так что вы можете делать такие вещи, как:
response = client.put("admin/users/4/primary_group", primary_group_id: 43)
Ах, классно, спасибо — я думал, что могу создать pull request после обновления кода здесь:
но сейчас я глубоко погружён в настройку и запуск, поэтому до изменений в самом коде Discourse ещё несколько дней. Однако я просто в восторге от Discourse — немного попробовал Flarum по рекомендации одного человека, которого лучше не называть, и честно говоря, сравнения нет: Discourse находится в совершенно другой лиге для тех, кто хочет делать что-то нестандартное.
Ура!
Изменить основную группу через API невозможно? ![]()
Если вы можете изменить это через UX, то сможете изменить и через API. См. Реверс-инжиниринг API Discourse
О, но если речь о Gem, то я не знаю. Извините.
Спасибо за ответ, @pfaffman
Я попробовал использовать обратный запрос, но это не сработало — получил ошибку 404 Not Found ![]()
/admin/users/barto_95/primary_group.json:
{
"errors": [
"L'URL ou la ressource demandée n'a pas été retrouvée."
],
"error_type": "not_found"
}
А также:
/admin/users/2/primary_group.json: (2 = ID пользователя barto_95)
{
"errors": [
"L'accès à la ressource demandée n'est pas autorisé."
],
"error_type": "invalid_access"
}
Если открыть в браузере URL /admin/users/2/primary_group.json, то JSON отображается:
Запрос для тестирования API:
curl --request PUT \
--url 'https://xxxxxr/admin/users/2/primary_group.json?=' \
--header 'Api-Key: a7bb1199xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdecbc7b41658' \
--header 'Apu-Username: Equipe_HACF' \
--header 'Content-Type: application/json' \
--data '{
"primary_group_id": "67"
}'
Спасибо за вашу помощь
Является ли этот пользователь администратором? По моему предположению, это проблема с правами доступа. Одна или несколько из следующих причин: неверный пользователь, неверный ключ или неверные права доступа для ключа.
Да, проблема в правах пользователя, который я использовал.
Спасибо ![]()