![](/img/trans.png)
[英]Why should i mix repo level objects with controller/service level objects?
[英]Behaviour should change due to authorization at service or controller level?
我想获取一些资源,我希望根据连接的用户有 2 种不同的行为。 如果用户是管理员,他会检索所有资源,否则他只会检索他可以访问的资源。
关于这种情况有什么建议吗? 最好的方法是什么?为什么?
以下是我发现的不同选项:
@GetMapping(value = "/myresources")
public void exportKdSchema(HttpServletResponse response) {
User user = getConnectedUser();
if(user.isAdmin()) {
resourceService.getAllResources();
}
else {
resourceService.getAllResourcesByUser(user);
}
}
@GetMapping(value = "/myresources")
public void exportKdSchema(HttpServletResponse response) {
User user = getConnectedUser();
resourceService.getResourcesByUser(user)
}
@Service
public class ResourceService{
public List<Resource> getResourcesByUser(User user) {
if(user.isAdmin()) {
resourceRepository.findAll()
}
else {
resourceRepository.findAllByUserId(user.getId())
}
}
}
@PreAuthorize("hasRole('RESOURCES_ALL')")
@GetMapping(value = "/myresources")
public void exportKdSchema(HttpServletResponse response) {
resourceService.getAllResources();
}
@GetMapping(value = "/myresources/{userId}")
public void exportKdSchema(@PathVariable("userId") Long userId) {
resourceService.getAllResourcesByUser(user);
}
对于应该如何完成,您可能会得到很多不同的意见。 我个人会为用户和管理员功能创建两个不同的端点:
/resources/my
和/admin/resources/{userId}
考虑一下某些管理员(您的客户)也可能将系统用作简单用户的情况。 系统管理和正常使用是两个不同的用例,所以我不会将它们混合在一起。
此外,您还可以从独立于用户角色的端点获得更多可预测的响应。
根据您可能需要的访问控制粒度,前缀/admin
端点还可能允许更容易的配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.