Publicación forzada en categoría restringida

Hola,

Estoy utilizando Discourse a través de la API como backend para mi comunidad. Hay ciertas categorías que deberían estar restringidas para los usuarios regulares, de modo que no puedan crear temas ni editar los títulos de los mismos. Sin embargo, sí deberían poder ver los hilos y responder a ellos. Todo esto debe hacerse mediante la API (usando un token de administrador) en nombre de esos usuarios. ¿Existe alguna forma de implementar esto mediante medidas de seguridad adecuadas y llamadas a la API? Por ejemplo, sería suficiente si pudiera forzar la creación de una publicación en una categoría restringida en nombre de un usuario regular (usando una clave/usuario de administrador), pero no encuentro ese caso en la documentación de la API.

¡Muchas gracias!

La API realmente no va a estar documentada para tu caso de uso, ya que no tiene soporte oficial (aunque tengo al menos un cliente que está haciendo algo similar). Cómo realizar ingeniería inversa de la API de Discourse es probablemente lo mejor que puedes conseguir, y también discourse/config/routes.rb at main · discourse/discourse · GitHub.

Si estás usando una clave de API de administrador, se eliminan todas las restricciones, por lo que deberías poder crear el tema. O quizás podrías crear el tema como el usuario y luego moverlo a la categoría en la que no quieres que puedan publicar.

Gracias. Sé sobre la ingeniería inversa, pero no hay un caso de uso similar desde el front-end de Discourse que pueda interceptar. Quiero decir que, aunque haya iniciado sesión como administrador, no hay forma de crear un tema como otro usuario.

La solución temporal que he implementado por ahora es permitir que una categoría específica tenga permisos de ver/comentar para todos, y de ver/comentar/crear para administradores. Así, los temas se crean únicamente por el “sistema” (de modo que los usuarios no puedan alterar los títulos) junto con una publicación original basada en una plantilla. Luego puedo usar la clave de API para comentar como diferentes usuarios en esos temas creados.

Creo que el otro grupo al que estaba ayudando tenía usuarios que iniciaban sesión en Discourse (mediante SSO, ¿quizás?) para actuar en su propio nombre. De esa manera se obtienen todas las protecciones de usuario que ofrece Rails. Hacer todo con una única clave de API de administrador parece una receta para el desastre.

Pero supongo que, para resolver tu problema actual, lo que harías sería crear el tema como administrador y luego cambiar su propiedad. Eso debería ser bastante sencillo. (Y luego esperar a que nada salga mal entre el inicio y el final de toda la transacción.)

Supongo que otra posibilidad sería crear un plugin personalizado que añadiera una ruta para crear como usuario (no he revisado las rutas que enlacé antes para ver si ya existe de alguna manera).

Pero cuanto más lo pienso (teniendo en cuenta que no sé realmente lo que estás haciendo), más creo que tu interfaz de usuario debería iniciar sesión como los usuarios para que pueda interactuar con la API en nombre de cada uno de ellos.