CustomUserDetails.java

package com.is.findyourplace.controller.gestioneUtenza;

import com.is.findyourplace.persistence.entity.Utente;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;

import java.util.Collection;
import java.util.List;

/**
 * Gestisce la creazione di un Custom User in spring boot security.
 */
public class CustomUserDetails extends User {
    /**
     * Costruttore CustomUserDetails.
     * @param username String - Username Utente
     * @param password String - Password Utente;
     * @param enabled boolean
     * @param accountNonExpired boolean
     * @param credentialsNonExpired boolean
     * @param accountNonLocked boolean
     * @param authorities Lista di ruoli personalizzati
     */
    public CustomUserDetails(
            final String username, final String password,
            final boolean enabled, final boolean accountNonExpired,
            final boolean credentialsNonExpired, final boolean accountNonLocked,
            final Collection<? extends GrantedAuthority> authorities) {
        super(
                username, password,
                enabled, accountNonExpired,
                credentialsNonExpired, accountNonLocked,
                authorities
        );
    }

    /**
     * Map Utente fields to UserDetails
     * Authorities based on the isAdmin flag
     * All users have the "USER" role,
     * Admins have both "USER" and "ADMIN" roles.
     * @param utente Utente
     * @return CustomUserDetails con ruoli personalizzati
     */
    public static CustomUserDetails fromUtente(final Utente utente) {
        return new CustomUserDetails(
                utente.getUsername(),
                utente.getPasswordHash(),
                true,
                true,
                true,
                true,
                utente.isAdmin()
                        ? List.of(() -> "ROLE_USER", () -> "ROLE_ADMIN")
                        : List.of(() -> "ROLE_USER")
        );
    }
}