【发布时间】:2019-03-17 12:24:10
【问题描述】:
我正在构建一个带有身份验证和不同角色的 rest 后端。现在的问题是,我喜欢根据用户角色过滤结果。
我自己没有实现控制器,而是使用
PagingAndSortingRepository Inferface,这工作得很好。我正在寻找类似于python-django method 的东西。
解决方案必须符合 REST 模式。
为了更清楚,这里有一个示例:
假设我有两个用户,用户 A 是角色“user”的普通用户。用户 B 是具有“admin”角色的管理员。
有一个数据库表,其中存储了userData。该表如下所示。
| ID | username | name | email |
他们都向/userData发送了一个简单的认证GET请求。
现在我的后端根据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"
}
]
}
【问题讨论】:
-
那么控制器查询一个查询数据的服务?然后您将身份验证传递给该服务?
-
不,我没有控制器。
GET、POST等的方法是由spring boot在运行时创建的,通过PagingAndSortingRepository Inferface。 -
正如您在可能的副本中看到的那样,拥有两个单独的端点并使用
@PreAuthorize注释保护它们要容易得多。 -
确实如此,但这不符合其余模式。我认为这将是一个非常肮脏的解决方案。尤其是因为我必须保护大量这样的端点。
标签: java spring rest spring-boot