2014-10-24 20 views
13

Sto tentando di autorizzare le API esposte da Spring Data REST. Finora io sono in grado di fare basata sui ruoli autorizzazione cioè:Utilizzo di Spring Security ACL con Spring Data REST

@RepositoryRestResource(path = "book") 
public interface BookRepository extends JpaRepository<Book, Long> { 

    @PreAuthorize("hasRole('ROLE_ADMIN')") 
    <S extends Book> Book save(Book book); 
} 

anche nello stesso progetto ho un livello di servizio con il meccanismo di ACL, che sta lavorando.

io sono in grado di usare l'espressione con la Primavera postfiltro dati REST cioè:

@PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, admin)") 
List<Book> findAll(); 

Sarebbe di grande aiuto, se qualcuno utilizza ACL con la Primavera dati REST.

Nota: Sono consapevole di seguito le questioni aperte:

https://jira.spring.io/browse/DATAREST-236

https://jira.spring.io/browse/SEC-2409

risposta

34

utilizzando JpaRepository stato shadowing Lista <Prenota> metodo findAll(). Quindi ho usato CrudRepository e PostFilter è stato applicato.

Per maggiori dettagli, un progetto di esempio è disponibile su GitHub: https://github.com/charybr/spring-data-rest-acl

autorizzazione ACL-based sta lavorando per qui di seguito esposte entità entro la primavera dati REST.

import org.springframework.data.repository.CrudRepository; 
import org.springframework.data.rest.core.annotation.RepositoryRestResource; 
import org.springframework.security.access.method.P; 
import org.springframework.security.access.prepost.PostFilter; 
import org.springframework.security.access.prepost.PreAuthorize; 

@RepositoryRestResource(path = "book") 
public interface BookRepository extends CrudRepository<Book, Long> { 

    @PreAuthorize("hasRole('ROLE_ADMIN') or hasPermission(#book, 'write')") 
    <S extends Book> Book save(@P("book") Book book); 

    @Override 
    @PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, admin)") 
    Iterable<Book> findAll(); 
} 
+5

Lei merita un intervento (anche un anno e mezzo dopo) per aver trovato il tempo per venire e inviare la risposta al tuo problema. Grazie ! –

+0

Come filtrare i risultati usando '@ PostAuthorize' all'interno di una funzione' findAll() 'basata su valori di entità individuali all'interno dell'array pagabile? –

+0

@ W.M. per pageable '@ PostAuthorize' non è una buona idea. Si prega di fare riferimento a https://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#data-query –

Problemi correlati