spring-data-jpa spring-data-rest spring-security-acl

spring data jpa - Uso de Spring Security ACL con Spring Data REST



spring-data-jpa spring-data-rest (1)

el uso de JpaRepository estaba siguiendo el método de búsqueda de lista <Book> encontrar todos (). Luego usé CrudRepository, y PostFilter se aplicó.

Para obtener más detalles, hay un proyecto de muestra disponible en GitHub: https://github.com/charybr/spring-data-rest-acl

La autorización basada en ACL está trabajando para la siguiente entidad expuesta por Spring Data 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(); }

Estoy tratando de autorizar las apis expuestas por Spring Data REST. Hasta ahora puedo hacer una autorización basada en roles, es decir:

@RepositoryRestResource(path = "book") public interface BookRepository extends JpaRepository<Book, Long> { @PreAuthorize("hasRole(''ROLE_ADMIN'')") <S extends Book> Book save(Book book); }

También en el mismo proyecto tengo una capa de servicio con mecanismo ACL, que está funcionando.

No puedo usar la expresión PostFilter con Spring Data REST, es decir:

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

Sería de gran ayuda si alguien utiliza ACL con Spring Data REST.

Nota: Soy consciente de los siguientes temas abiertos:

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

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