In einem JHipster-basierten Projekt müssen bestimmte Spalten basierend auf der angemeldeten Rolle/dem Benutzer selektiv herausgefiltert werden. Alle Benutzer können die meisten Spalten anzeigen, jedoch nur einige privilegierte Spalten Benutzer können bestimmte sichere Felder/Spalten anzeigen/ändern.JHipster Rollenbasierte Maskierung bestimmter Spalten
Es sieht so aus, als ob die einzige Möglichkeit, dies zu erreichen, EntityListeners ist. Ich kann einen EntityListener verwenden und eine bestimmte Spalte während PostLoad
Ereignis maskieren. Sagen wir zum Beispiel, ich maskiere die Spalte my_secure_column
mit XXX und zeige sie dem Benutzer an.
Der Benutzer ändert dann einige andere Felder/Spalten (zu denen er Zugriff hat) und sendet das Formular. Muss ich die teilweise ausgefüllte Entität erneut in das Ereignis PreUpdate
einfangen, den ursprünglichen Wert für my_secure_column
aus der Datenbank abrufen und vor dem Fortsetzen festlegen?
All dies scheint ineffizient. Mehrere Stunden durchforstet, konnte jedoch keine spezifische Implementierung finden, die diesem Anwendungsfall am besten entspricht.
Bearbeiten 1: Dies sieht wie ein erster Schritt, um dies auf eine etwas bessere Weise zu erreichen. Updating Entities with Update Query in Spring Data JPA
Ich könnte bestimmte Teilupdates wie updateAsUserRole, updateAsManagerRole usw. verwenden, anstatt die ganze Entität die ganze Zeit zu behalten.
In JHipster, normalerweise bei einer Aktualisierung, werden Daten direkt an die Entität gebunden (es ist keine separate DTO erforderlich). Im Normalfall laden wir die Entity nicht. Es ist nur ein Update/Speichern des gebundenen Objekts, das vom Browser empfangen wird. Aber für diesen speziellen Anwendungsfall sieht es so aus, als müssten wir die Entität erneut laden, vergleichen und zusammenführen. Dies scheint eine verschwenderische Übung zu sein. – user1880957
Ich habe JHipster angeschaut, und obwohl es dich zum Laufen bringt, würde ich es nie für die Produktion verwenden. Wie bei jeder Codegenerierung, die versucht, ein allgemeines Rahmenwerk zu erstellen, wird es immer fehlschlagen (meine 13-jährige Meinung). Wir haben Junior-Ressource, die JHipster verwenden wollte, und es gibt Ihnen eine gute Idee, welche Komponenten benötigt werden, aber Sie sollten ein neues Projekt erstellen und das Fett wegschneiden - Das Standard (monolithische) JHipster-Projekt ist 5000 Zeilen, in der Regel Sie brauchen 10% davon, der Rest muss in irgendeiner Weise angepasst werden. Tun Sie sich einen Gefallen und lernen Sie Spring (Core, Boot, Security, Data) –
Ich habe nie die gleiche Klasse wie Entity und DTO verwendet. Ich weiß, dass die meisten JPA-Frameworks integrierte REST-Services zur Manipulation von Daten bieten, aber meiner Erfahrung nach ist dies ein Fehler. Es gibt einfach unterschiedliche Anforderungen an eine Entität und ein DTO, und Sie benötigen oft eine Sicherheitsebene, bevor Sie die Datenbank aktualisieren.Das Erstellen als DTO für Ihre Entitäten ist eine einmalige Aufgabe von etwa 1-5 Minuten, das ist nichts im Vergleich zu der Zeit, die Sie damit verbringen, Ihre Entity-Klasse zu manipulieren, damit sie beides macht. Du kannst mir das Wort sagen oder es selbst lernen;) –