In einer Anwendung, die Spring Data JPA und Spring Data REST verwendet, nehmen wir an, Sie haben eine Entitätsklasse wie diese:
%Vor% Wir möchten, dass Spring Data REST alle Felder dieser Entität anzeigt, mit Ausnahme von superSecretValue
. Daher haben wir dieses Feld mit @JsonIgnore
versehen.
In einigen Fällen möchten wir jedoch auf superSecretValue
zugreifen, und so erstellen wir eine Projektion, die alle diese Felder zurückgibt:
Super. Jetzt können wir auf Person
entities einschließlich das Feld superSecretValue
wie folgt zugreifen:
Meine Frage ist Wie können wir diese Projektion sichern ? Wie können wir Dinge so konfigurieren, dass jeder Person
entities ohne das superSecretValue
-Feld abrufen kann ... aber nur Personen mit einer bestimmten Rolle (zB ROLE_ADMIN
) können die Projektion zum Abrufen verwenden das versteckte Feld?
Ich habe endlose Beispiele für die Verwendung von @PreAuthorize
oder @Secured
Annotationen gefunden, um Spring Data JPA Repository CRUD Methoden zu sichern (zB save()
, delete()
) ... aber keine Beispiele wie man die Verwendung von a Spring Data REST-Projektion.
Sie können Eigenschaften in Projektionen über @Value
mit bedingten SpEL-Ausdrücken überladen - wie in diesem hat bereits eine ähnliche Frage beantwortet .
Betrachten Sie andere Alternativen (andere bereits erwähnt):
Person
& lt; - & gt; Account
) Resource
type (DTO) vorverarbeitet und zurückgibt, abhängig von den Benutzerberechtigungen (z. B. PublicPerson
anstatt Person
zurückgeben). Dann können Sie benutzerdefinierte Ressourcenprozessoren zum Hinzufügen von benutzerdefinierten Links und benutzerdefinierten Projektionen für diese Typen schreiben. Siehe auch: Problem zu diesem Thema aus dem Frühjahr-Datenrest DATAREST-428 .
Tags und Links java spring rest spring-data spring-data-rest