java / intermediate
Snippet
Auswertung von Zugriffsrechten auf Domänenebene mit benutzerdefinierten PermissionEvaluators in Spring Security
Benutzerdefinierte PermissionEvaluator-Implementierungen ermöglichen eine feingranulare Zugriffskontrolle in SpEL-Sicherheitsausdrücken wie @PreAuthorize("hasPermission(#document, 'WRITE')") und entkoppeln Domänenprüfungen vom Controller-Code.
snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Componentpublic class DocumentPermissionEvaluator implements PermissionEvaluator {@Overridepublic boolean hasPermission(Authentication auth, Object targetDomainObject, Object permission) {if (targetDomainObject instanceof Document doc && permission instanceof String perm) {return doc.getOwnerId().equals(auth.getName()) || "READ".equalsIgnoreCase(perm);}return false;}@Overridepublic boolean hasPermission(Authentication auth, Serializable targetId, String targetType, Object permission) {return false;}}
spring
Erklärung
1
public class DocumentPermissionEvaluator implements PermissionEvaluator
Implementiert die Schnittstelle von Spring Security zur Überprüfung von Berechtigungen auf Domänenobjekten.
2
if (targetDomainObject instanceof Document doc && permission instanceof String perm)
Nutzt Java Pattern Matching für instanceof, um Zielobjekt und Berechtigung typensicher zu prüfen und zu casten.
3
return doc.getOwnerId().equals(auth.getName()) || "READ".equalsIgnoreCase(perm);
Wendet Autorisierungsregeln an, indem der angemeldete Principal mit dem Dokumentbesitzer verglichen wird.