Files
spring-auth-demo/permission-evaluator/README.md
T

21 lines
1.4 KiB
Markdown

# permission-evaluator
Companion code for [Spring Security hasPermission() with PermissionEvaluator and @EnableMethodSecurity](https://ankurm.com/spring-security-haspermission-permissionevaluator-method-security/).
A `Document` has an owner and a team. `DocumentPermissionEvaluator` decides: admins can do everything, the owner or a team-mate can read, only the owner can write or delete.
Run it: `mvn test` (JDK 25, Spring Boot 4.1.2, Spring Security 7.1.2). Each test writes what it observed to [`output/`](output).
| file | what it shows |
|---|---|
| `00-denyall-log.txt` | log lines from the bean-only setup: Spring Security's default evaluator denies |
| `01-bean-only-wiring.txt` | only a `PermissionEvaluator` bean, no handler bean: everything is denied |
| `02-explicit-handler-matrix.txt` | with a `MethodSecurityExpressionHandler` bean: the allow/deny matrix |
| `03-postauthorize-side-effect.txt` | `@PostAuthorize` runs the method body before denying |
| `04-forged-owner.txt` | `hasPermission(#doc, ...)` trusts the caller's object; the id-only variant does not |
| `05-load-counts.txt` | document loads per call: `get`, `list`, `@PostFilter` by id |
| `06-cache-and-staleness.txt` | a caching evaluator saves loads and serves a stale allow |
| `07-http-status-codes.txt` | 401, 200, 403 over HTTP Basic, including a missing document |
Profiles: `handler` registers the `MethodSecurityExpressionHandler` bean, `cache` adds the caching evaluator.