我正在使用Spring Boot构建一个rest API,文章实体的状态属性为PUBLISHED
或DRAFT
。草稿受到限制,只有经过身份验证的用户才能访问它们。
使用spring-security-data
和spring-boot-starter-security
我可以在@Query
上使用ArticleRepository
注释来过滤或拒绝对草稿的访问。
@NoRepositoryBean
public interface PublishableEntityRepository<T, ID extends Serializable>
extends PagingAndSortingRepository<T, ID> {
@PostFilter("hasPermission(filterObject, 'read')")
List<T> findAll();
@PostAuthorize("hasPermission(returnObject, 'read')")
T findOne(ID id);
@Query("select o from #{#entityName} o where o.status = 'PUBLISHED' " +
"or 1 = ?#{security.hasRole('ROLE_ADMIN') ? 1 : 0}")
Page<T> findAll(Pageable var1);
}
这可以按预期工作。问题是请求/categories/{id}/articles
的端点时。请求此端点时,@ Pre / @ Post注释均不适用。事实上,ArticleRepository
无法访问AFAIK。
我的问题是,如何为这些相关资源实施相同的ACL?