Wie kann der Zugriff nach Rolle auf eine Spring Data REST-Projektion beschränkt werden?

8

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:

%Vor%

Super. Jetzt können wir auf Person entities einschließlich das Feld superSecretValue wie folgt zugreifen:

%Vor%

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.

    
Steve Perkins 11.11.2015, 23:29
quelle

2 Antworten

2

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):

  1. Modell-Refactoring. Aufteilen der Entität nach Zugriffslogik (z. B. Person & lt; - & gt; Account )
  2. Hinzufügen benutzerdefinierter Endpunkte für spezielle Logik- und Zugriffsprüfungen Zum Beispiel der aktuelle Benutzer bei "/ people / me".
  3. Anpassen von Standardendpunkten Fügen Sie beispielsweise einen benutzerdefinierten Controller für "/ people", "/ people / {id}" hinzu, der benutzerdefinierte 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 .

    
aux 15.03.2017 14:35
quelle
0

Sie könnten diese Lösung versuchen: Ссылка

%Vor%     
Haroldo_OK 15.03.2017 15:03
quelle