Sto facendo sviluppare un plugin che aggiungerà un valore booleano, basato su una logica personalizzata, alla tabella user_custom_fields per ogni utente non autorizzato a creare un nuovo argomento.
user.custom_fields['can_create_topic'] = false;
Cosa voglio fare?
Voglio nascondere il pulsante “+ Nuovo Argomento” per alcuni utenti in base a una logica personalizzata.
Domanda
È possibile personalizzare can_create_topic in guardian in modo che esegua un controllo aggiuntivo su un user_custom_field per determinare se un utente è autorizzato a creare un nuovo argomento o meno?
Sì, certo, puoi modificare le classi Ruby con i plugin. È software, facilmente modificabile, non un viaggio spaziale intergalattico con vele solari o cunicoli spazio-temporali, quindi è ovviamente possibile modificare il comportamento di Discourse con un plugin:
Non conosco il tuo caso d’uso, ma il modo più semplice e sicuro per farlo è aggiungere o rimuovere questi utenti da un gruppo che ha il permesso di creare un argomento.
@pfaffman Anche questa è un’ottima idea. Tuttavia, penso che se potessi sovrascrivere il metodo can_create_topic? in TopicGuardian, sarebbe una soluzione più pulita. Esiste qualche plugin a cui posso fare riferimento che abbia una modifica simile?
Quello che non so è come posso far sì che la mia sottoclasse di TopicGuardian dal plugin sostituisca TopicGuardian nella classe Guardian, dato che viene mixinata anziché iniettata come dipendenza.
Ok. Credo di aver trovato la risposta. Devo solo implementare il metodo “can_create_topic?” nel module ::TopicGuardian e questo modificherà automaticamente il comportamento di TopicGuardian senza necessità di iniettarlo o registrarlo da qualche parte. Inoltre, posso usare il metodo super all’interno del mio metodo sovrascritto, così non devo tenerlo manualmente sincronizzato con il metodo originale nel caso in cui quest’ultimo venga modificato.