![](/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.