Spring Data JPA und Spring-Security: Filter auf Datenbankebene (speziell für Paging)

Ich versuche, meinem Open-Source-Projekt Sicherheit auf Methodenebene mit Anmerkungen und Frühlingssicherheit hinzuzufügen. Das Problem, mit dem ich jetzt konfrontiert bin, sind findAll-Methoden, insbesondere für Paging (z. B. das Zurücksenden einer Seite).

Die Verwendung von @PostFilter funktioniert auf Listen (aber ich persönlich glaube, es ist keine gute Idee, in einer Anwendung und nicht in einer Datenbank zu filtern), schlägt jedoch bei Paging-Abfragen vollständig fehl.

Das ist problematisch, weil ich eine Entität enthalteList<Compound>. Es gibt verschiedene Implementierungen von Compound und ein Benutzer hat möglicherweise nur das Recht, eine der Compounds zu lesen. Verbindung verwendetTABLE_PER_CLASS Erbe. Repositories implementierenQueryDslPredicateExecutor.

Ich denke, jeder Abfrage ein Prädikat hinzuzufügen, das die Rückgabeergebnisse basierend auf dem aktuellen Benutzer einschränkt. Allerdings habe ich etwas verloren in Bezug auf a) wie das Datenmodell für Benutzer und Rollen aussehen sollte und b) wie dann das Prädikat erstellt wird (dies ist wahrscheinlich einfach, sobald das Modell definiert ist). Oder bietet querydsl bereits typbasiertes Filtern (für Elemente in der abgefragten Klasse) an?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage