Hier ist ein Codeausschnitt, in dem ich eine zusätzliche Validierung hinzufügen möchte
(vereinfachter Code und Anwendungsfall)
# Verhindern, dass Nicht-Mitarbeiter die Kategorie eines Themas ändern
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] << "Sie können die Kategorie dieses Themas nicht ändern"
end
end
Dies verhindert, dass die Kategorie von Nicht-Mitarbeitern geändert wird, gibt aber keinen Fehler aus.
Dies funktionierte früher:
Dieses Plugin wurde inzwischen archiviert.
Diese Anforderung sollte doch von der API unterstützt werden?
Du bist besser in diesen Dingen als ich, aber ich würde denken, dass Rails dies nicht nach oben weiterleiten muss, weil erwartet wird, dass Ember dem Benutzer keine Kategorie auswählen lässt, die nicht eine ist, die der Benutzer auswählen können sollte. Stelle also vielleicht sicher, dass das Frontend sie daran hindert, die Kategorie zu ändern, wenn sie dazu nicht in der Lage sind, damit PostRevisor nie mit dieser unangenehmen Situation konfrontiert wird?
Es ist eine gute Praxis, zuerst am API-Ende zu limitieren und dann, wenn möglich, am Frontend – d.h. Sie sollten sich niemals nur auf das Frontend verlassen, um eine illegale Aktion zu verhindern.
Darüber hinaus sollte das Frontend Active Record-Fehler weiterleiten.
Daher ist die Durchführung hier in der API wichtig.
Einverstanden. Sie möchten, dass Rails es erzwingt.
Ich dachte, ich hätte verstanden, dass es die Anforderung erzwingt und die Änderung ablehnt, aber dem Frontend keine ausreichend gute Fehlermeldung liefert.
Ich versuche nur, eine Kategorieänderung zu verhindern, daher ist die Benutzeroberfläche eher unpraktisch, da sie so konzipiert ist, dass Sie alle Metadaten ändern oder gar keine.
Daher wäre eine nach oben weitergeleitete Fehlermeldung sehr hilfreich.
Die Starrheit von .gjs-Vorlagen macht diese Art von Änderungen jetzt sehr schwierig.
Diese Vorlage ist immer noch hbs, aber ich möchte sie aus offensichtlichen Gründen nicht überschreiben.
Wieder einmal bist du darin besser als ich, aber ich dachte, es wäre möglich, den Kategorie-Selektor zu verstecken das scheint nicht zu funktionieren.
Vielleicht ist es also am besten, den Kategorie-Serializer zu hacken, damit er keine Kategorien sendet. Das scheint jedoch knifflig zu sein, da man herausfinden müsste, wie man ihn nur beim Bearbeiten eines Themas und nicht beim Erstellen eines neuen hackt.
Ich bin auch auf dieses Verhalten gestoßen und war ratlos. Meine gesamte Entwicklung und Tests erfolgen über API-Anfragen, da ich noch nichts auf der Benutzeroberfläche habe. Daher war ich verwirrt, als die Antworten, die ich erhielt, wie Erfolge aussahen. Ich dachte, meine Guards wären völlig funktionslos, bis ich das Minimum eines Debuggers zusammengestellt und mich durch den Stepper gekämpft hatte.
Bearbeiten:
Huh… Ich habe beschlossen, meine Umgebung vollständig neu zu starten, und sie begann, Fehlermeldungen in der API-Antwort zurückzugeben.