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?
0
0
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.
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")
}
}