Перейти до основного вмісту

Authorization (RBAC)

This document describes authorization within the backend using Role-Based Access Control (RBAC).


1. Role-Based Access Control

  • Roles are managed in Keycloak and mapped to Spring Security authorities.
  • Role Hierarchy (optional): ADMIN > USER.

2. Spring Security Configuration

@EnableWebSecurity
public class AuthorizationConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/health", "/docs/**").permitAll()
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/bookings/**").hasAnyRole("USER", "ADMIN")
.anyRequest().authenticated()
)
.oauth2ResourceServer(oauth2 -> oauth2.jwt());
return http.build();
}
}

3. Method-Level Security

  • Enable with @EnableGlobalMethodSecurity(prePostEnabled = true)
  • Annotate service methods:
@PreAuthorize("hasRole('ADMIN')")
public void deleteUser(UUID userId) { ... }

@PreAuthorize("hasRole('USER')")
public Booking getBooking(UUID bookingId) { ... }

4. Keycloak Role Mapping

  • In Keycloak, assign roles to users or groups
  • Token contains realm_access.roles claim
  • Spring Security auto-converts roles to ROLE_* authorities

  • Document Version: 1.0
  • Date: 2025-06-23
  • Author: ArturChernets