实现相关资源的ACL

时间:2016-06-03 15:01:09

标签: java spring spring-security spring-data-rest spring-hateoas

我正在使用Spring Boot构建一个rest API,文章实体的状态属性为PUBLISHEDDRAFT。草稿受到限制,只有经过身份验证的用户才能访问它们。

使用spring-security-dataspring-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?

此示例项目将开箱即用https://github.com/jdgiotta/rest-security-example

0 个答案:

没有答案