Post forzato in categoria riservata

Ciao,

Sto utilizzando Discourse tramite API come backend per la mia community. Ci sono alcune categorie che dovrebbero essere limitate per gli utenti regolari, in modo che non possano creare nuovi argomenti o modificare i titoli degli argomenti esistenti. Tuttavia, dovrebbero essere in grado di visualizzare i thread e rispondere ad essi. Tutto questo dovrebbe essere gestito tramite le API (utilizzando un token amministratore) a nome di tali utenti. Esiste un modo per implementare questa funzionalitĂ  attraverso le chiamate API corrette e con adeguate misure di sicurezza? Ad esempio, sarebbe sufficiente poter creare forzatamente un post in una categoria riservata a nome di un utente regolare (utilizzando una chiave/utente amministratore), ma non riesco a trovare questo caso specifico nella documentazione delle API.

Grazie mille!

L’API non sarà davvero documentata per il tuo caso d’uso, poiché non è supportata (anche se ho almeno un cliente che sta facendo qualcosa di simile). Come fare reverse engineering dell’API di Discourse è probabilmente la migliore risorsa a tua disposizione, così come discourse/config/routes.rb at main · discourse/discourse · GitHub.

Se stai utilizzando una chiave API amministrativa, tutte le restrizioni vengono rimosse, quindi dovresti essere in grado di creare l’argomento. Oppure potresti creare l’argomento come utente e poi spostarlo nella categoria in cui non desideri che possa pubblicare?

1 Mi Piace

Grazie. So già del reverse engineering, ma non esiste un caso d’uso simile dal front-end di Discourse da intercettare. Intendo dire che, anche se sono loggato come amministratore, non c’è modo di creare un argomento come un altro utente.

Il workaround che ho implementato per ora consiste nel concedere a una categoria specifica i permessi di visualizzazione/commento per tutti e di visualizzazione/commento/creazione solo per gli amministratori. In questo modo, gli argomenti vengono creati esclusivamente da “system” (quindi gli utenti non possono manomettere i titoli) insieme a un post originale basato su un modello. Successivamente, posso utilizzare la chiave API per commentare come diversi utenti in quegli argomenti creati.

Penso che l’altro gruppo a cui stavo dando una mano avesse utenti che accedevano a Discourse (tramite SSO, forse?) agendo così a proprio nome. In questo modo si ottengono tutte le protezioni per gli utenti garantite da Rails. Fare tutto con un’unica chiave API di amministratore sembra una ricetta per il disastro.

Ma immagino che, per risolvere il problema attuale, la soluzione sarebbe creare l’argomento come amministratore e poi modificarne la proprietà. Dovrebbe essere abbastanza semplice. (E poi sperare che non succeda nulla di sbagliato tra l’inizio e la fine dell’intera transazione.)

Un’altra possibilità potrebbe essere creare un plugin personalizzato che aggiunga una rotta create-as-user (non ho controllato le rotte a cui ho linkato prima per vedere se esiste già in qualche modo).

Ma più ci penso (sapendo che non conosco affatto cosa state facendo realmente, ovviamente), più penso che vogliate che il vostro front-end acceda come gli utenti, in modo da poter interagire con l’API a nome dell’utente.