Ecco un po’ di codice in cui voglio aggiungere una validazione aggiuntiva
(codice e caso d’uso semplificati)
# impedisce ai non staff di cambiare categoria in un argomento
PostRevisor.track_topic_field(:category_id) do |tc, category_id|
if tc.guardian.is_staff?
tc.record_change('category_id', tc.topic.category_id, category_id)
tc.topic.category_id = category_id
else
tc.topic.errors[:base] << "non puoi cambiare categoria in questo tipo di argomento"
end
end
questo impedirà che la Categoria venga cambiata da non staff, ma non genera un errore.
Questo funzionava:
Quel plugin è stato da allora archiviato.
Questo requisito dovrebbe sicuramente essere supportato dall’API?
Sei più bravo in queste cose di me, ma penserei che Rails non abbia bisogno di rimandare questo indietro perché ci si aspetta che Ember non permetta all’utente di selezionare una categoria che non sia una che l’utente dovrebbe essere in grado di selezionare. Quindi, forse assicurati che il front-end impedisca loro di cambiare categoria se non dovrebbero farlo, in modo che PostRevisor non venga mai messo di fronte a questa situazione scomoda?
È buona norma limitare prima lato API, poi lato front-end se possibile - cioè non dovresti mai fare affidamento solo sul front-end per prevenire un’azione illegale.
Inoltre, il front-end dovrebbe propagare gli errori di Active Record.
Pensavo di aver capito che stesse imponendo il requisito e rifiutandosi di apportare la modifica, ma semplicemente non fornendo un errore sufficientemente valido al front-end.
Sto solo cercando di impedire un cambio di categoria, quindi l’interfaccia utente è piuttosto inutile in quanto è progettata per consentirti di modificare tutti i metadati o nessuno.
Quindi un errore segnalato sarebbe davvero utile.
La rigidità dei template .gjs rende questi tipi di modifiche molto difficili ora.
Questo template è ancora hbs ma non voglio sovrascriverlo per ovvie ragioni.
Di nuovo, sei più bravo di me in questo, ma penserei che sarebbe possibile nascondere il selettore di categoria sembra che non funzionerà.
Quindi forse la cosa da fare è modificare il serializzatore di categoria in modo che non invii alcuna categoria. Sembra complicato, però, dato che dovresti capire come modificarlo solo quando stai modificando un argomento anziché crearne uno.
Ho riscontrato questo comportamento anch’io e non sapevo cosa fare. Tutto il mio sviluppo e test avviene tramite richieste API poiché non ho ancora nulla sul frontend, quindi ero confuso quando le risposte che ricevevo sembravano successi. Pensavo che le mie protezioni fossero completamente non funzionali finché non ho messo insieme il minimo di un debugger e ho lottato attraverso lo stepper.
modifica:
Huh… ho deciso di riavviare completamente il mio ambiente e ha iniziato a restituire messaggi di errore nella risposta API.