Siema,
Mam 2 tabele w bazie danych, jedna z rolami a druga z uprawnieniami do nich, każda rola może mieć dowolne uprawnienie. Jak zrobić żeby na poszczegolny endpoint mieli dostęp użytkownicy z określonym uprawnieniem?
Blokowanie dostępu do endpoint'u na podstawie roli
- Rejestracja: dni
- Ostatnio: dni
- Postów: 9
0
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2787
0
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1909
1
Przyjmujesz request i sprawdzasz określone uprawnienia. Możesz to zrobić samodzielnie albo automagicznie przez Spring Security (filtry, adnotacje etc). Jak nie ma to zwracasz 403.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: 74.7261832, -41.7409518
- Postów: 151
1
Ja osobiście lubię napisać sobie własną annotacje lub serwis który sprawdza czy użytkownik ma odpowiednie uprawnienia, aby móc korzystać z takiego endpointu. Coś tego typu
Kotlin :)
@PostMapping("/sell/{productId}")
fun sellProduct(@PathVariable("productId") productId: Long,
@RequestBody @Valid sellProductDto: SellProductDto
) {
currentUserService.hasPermissionsOrThrow(Permission.SELL_PRODUCT)
productManagement.sellProduct(productId, sellProductDto.quantity, sellProductDto.price)
}
Też mam napisany archUnit który sprawdza czy metody w kontrolerach zabezpieczonych zawiera wywołanie metody hasPermissionOrThrow/hasRoleOrThrow.
fun hasPermissionsOrThrow(vararg permissions: Permission) {
if (!hasPermission(permissions.toList())) {
throw ResponseStatusException(HttpStatus.FORBIDDEN, "You dont have permissions")
}
}
fun hasRolesOrThrow(vararg systemRoles: SystemRole) {
if (!hasAuthority(systemRoles.toList())) {
throw ResponseStatusException(HttpStatus.FORBIDDEN, "You dont have roles")
}
}