Ответ 1
используя JpaRepository, был скрыт список <Book> findAll(). Затем я использовал CrudRepository, и PostFilter был применен.
Для получения более подробной информации, пример проекта доступен в GitHub: https://github.com/charybr/spring-data-rest-acl
Авторизация на основе ACL работает для ниже объекта, открытого 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();
}