Blokowanie dostępu do endpoint'u na podstawie roli

Blokowanie dostępu do endpoint'u na podstawie roli
M3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

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?

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2787
Charles_Ray
  • 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.

krancki
  • 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 :)

Kopiuj
    @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.

Kopiuj
    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")
        }
    }

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.