Sping Boot REST:根据用户角色过滤结果

时间:2018-10-12 09:39:19

标签: java spring rest spring-boot

我正在使用身份验证和不同的角色来构建一个后端。现在的问题是,我想根据用户角色来过滤结果。

我还没有自己实现控制器,而是使用了 PagingAndSortingRepository Inferface,效果很好。我正在寻找的与此python-django method类似。

解决方案必须符合REST模式。

为了更加清楚,这是一个示例

假设我有两个用户,用户A是具有“用户”角色的普通用户。用户B是具有“管理员”角色的管理员。

有一个数据库表,其中存储着userData。该表如下所示。

| ID | username | name | email |

他们俩都向GET发送了一个简单的已认证 /userData请求。

现在,我的后端根据authentication标头检测用户并添加角色。

现在,根据角色,用户A应该仅获得包含其个人数据的应答者,用户B应该获得可通过/userData访问的所有数据。

对用户A的响应:

{
   "res":[
      {
         "id":1,
         "username":"userA",
         "name":"A",
         "email":"userA@mail.com"
      }
   ]
}

对用户B的响应:

{
   "res":[
      {
         "id":1,
         "username":"userA",
         "name":"A",
         "email":"userA@mail.com"
      },
      {
         "id":2,
         "username":"userB",
         "name":"B",
         "email":"userB@mail.com"
      },
      {
         "id":3,
         "username":"userC",
         "name":"C",
         "email":"userC@mail.com"
      }
   ]
}

1 个答案:

答案 0 :(得分:0)

我为Spring-Data-Jpa创建了一个扩展,可以处理这些需求(更多)。 spring-data-jpa-acl

您可以通过角色或关联来设置规则,并添加一些简单的注释,并且所有data-jpa方法和REST端点都将受到这些规则的影响。 该扩展为JPA查询添加了额外的规范,因此所有过滤都将在数据库端进行,因此您甚至可以对已过滤的数据使用分页。

相关问题