Есть ли 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, и он всегда актуален.

Отлично, спасибо :). Завтра утром, после того как сделаю, напишу здесь снова :slight_smile:

Итак, я смог использовать следующий код на 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 невозможно? :frowning:

Если вы можете изменить это через UX, то сможете изменить и через API. См. Реверс-инжиниринг API Discourse

О, но если речь о Gem, то я не знаю. Извините.

Спасибо за ответ, @pfaffman

Я попробовал использовать обратный запрос, но это не сработало — получил ошибку 404 Not Found :frowning:

/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" 
}'

:frowning: Спасибо за вашу помощь

Является ли этот пользователь администратором? По моему предположению, это проблема с правами доступа. Одна или несколько из следующих причин: неверный пользователь, неверный ключ или неверные права доступа для ключа.

Да, проблема в правах пользователя, который я использовал.

Спасибо :slight_smile: