【发布时间】:2016-01-07 12:02:28
【问题描述】:
前提:
Web 服务通过 REST 公开其数据。每条记录都属于创建记录的用户(行级安全)。用户只能检索自己的记录。
@RepositoryRestResource(path = "talks")
public interface TalkRepository extends PagingAndSortingRepository<Talk, Long> {
@Override
@Query("select t from Talk t where t.owner.id= ?#{principal?.id}")
Page<Talk> findAll(Pageable pageable);
}
该存储库现在在 /talks 端点下可用。
问题:
有没有办法 1) 在多个端点上公开相同的域实体和 2) 根据端点定义不同的 @Query 注释?
-
/talks
我会让它成为我对管理员角色开放的默认实现 -
/me/talks
这是针对主体应用行级安全性的端点,作为/me/**端点的一部分,它作为公共 api 公开给实现客户端。
此问题与https://jira.spring.io/browse/DATAREST-555 部分相关,但仅在目前不支持附加路径段的情况下。
理由:
我喜欢不必在像is owner or has_some_role(一些例子here)这样的SPeL查询中加入太多条件逻辑的想法。此外,通过与默认 API 不同的策略来保护 /me/** 端点将变得容易(例如,只有 /me/** 可能受 OAuth2 约束)。
【问题讨论】:
-
只写一个控制器,绑定一个URI,然后自己调用repository?
标签: spring-security spring-data spring-data-rest