¿Existe una API para establecer el grupo principal de un usuario?

Idealmente, me gustaría establecer el grupo principal cuando invito a un usuario al grupo al que lo estoy agregando en la invitación, pero no veo una forma de hacerlo. ¿Hay alguna forma a través de la API de establecer el grupo principal para un usuario?

Saludos

Creo que puedes actualizar la configuración del usuario a través de la operación updateUser:

1 me gusta

Gracias por la sugerencia. Intenté usarla. Actualicé el primary_group_name, el primary_group_id e incluso la entrada del array groups para que sea ['primary_group'] = true. Obtengo un 200 al llamar a update_user usando la gema, pero todavía no funciona. Le echaré un vistazo más de cerca mañana, a ver si hay alguna indicación de lo que está saliendo mal. Sin embargo, no vi nada obvio.

Este es el código que ejecuté y obtuve un código 200 del servidor:

client = DiscourseApi::Client.new("https://myforumurl.example.com")
client.api_key = 'una clave api con permisos globales para probar esto'
client.api_username = 'mi nombre de usuario administrador -- creo que esto no importa'
user = client.user('joepowell')
user['primary_group_name'] = 'dojo'
user['primary_group_id'] = 42
# este es el grupo 42 en el array de grupos
user['groups'][2]['primary_group'] = true
client.update_user('joepowell', user)
1 me gusta

Ver Ingeniería inversa de la API de Discourse. Esa es la forma más fiable de entender la API y siempre está actualizada.

4 Me gusta

Eso es excelente, gracias :). Publicaré aquí después de hacerlo mañana por la mañana :slight_smile:

2 Me gusta

Pude usar el siguiente código ruby para actualizar el id del grupo principal. Todavía no parece estar soportado a través del gem (busqué en el código referencias a primary_group_id y no vi ninguna que pareciera funcionar de esta manera).

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

1 me gusta

Creo que está bien usar estos métodos para hacer solicitudes a rutas que no son compatibles con la gema:

Así que puedes hacer cosas como:

 response = client.put("admin/users/4/primary_group", primary_group_id: 43)
1 me gusta

ahh genial, gracias. Pensé que podría hacer una solicitud de extracción (pull request) después de actualizar el código aquí:

pero estoy muy metido en esto ahora mismo para ponerlo en marcha, así que pasará un tiempo antes de que me ponga a hacer cambios en el código de Discourse en sí. Sin embargo, me encanta Discourse. Jugué brevemente con Flarum por recomendación de alguien que no será nombrado, y francamente no hay comparación, Discourse está en otra liga para cualquiera que quiera hacer algo fuera de lo común.

Saludos.

2 Me gusta

¿No es posible con la API cambiar el grupo principal? :frowning:

Si puedes cambiarlo con la UX, puedes cambiarlo con la API. Ver Ingeniería inversa de la API de Discourse

Oh, pero si te refieres a con la Gem, entonces no lo sé. Lo siento.

1 me gusta

gracias por responder @pfaffman

Probé con la inversa pero no funcionó, recibí 404 no encontrado :frowning:

/admin/users/barto_95/primary_group.json:

{
	"errors": [
		"La URL o el recurso solicitado no se encontró."
	],
	"error_type": "not_found"
}

y con
/admin/users/2/primary_group.json: (2 = ID del usuario barto_95)

{
	"errors": [
		"El acceso al recurso solicitado no está permitido."
	],
	"error_type": "invalid_access"
}

Si miro en el navegador con la URL /admin/users/2/primary_group.json veo el json

La solicitud para probar la 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: gracias por tu ayuda

¿Es ese usuario un administrador? Mi mejor suposición es que es un problema de permisos. Uno o más de: El usuario es incorrecto, la clave es incorrecta, los permisos para la clave son incorrectos.

1 me gusta

Sí, el problema es el derecho del usuario que utilicé.

¡Gracias! :slight_smile:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.