Blokowanie dostępu do endpoint'u na podstawie roli

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?

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1