0 Tage Serie
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
@Component
public class DocumentPermissionEvaluator implements PermissionEvaluator {
@Override
public 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;
}
@Override
public 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.