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: