首页 > 解决方案 > 根据编辑请求中的用户角色选择要使用的 pojo

问题描述

所以我想知道基于用户角色处理编辑请求的最佳方式是什么。

假设我有以下 PostMapping:

@PostMapping(value = "/edit")
public ResponseEntity<String> editIoc(@RequestBody GeneralPojoAllFields editRequest) 

GeneralPojoAllFields 看起来像这样:

public class GeneralPojoAllFields {    
    private String firstName;
    private String lastName;
    private String onlyAdminCanEditField;
}

这是管理员可以使用的 pojo,最终将映射到要保存到数据库的实体类中。但是,如果我们有一个想要编辑它的普通用户,并且假设他们在 UI 中不受限制,那么这种设计会起作用吗?我目前在想的是我会有一个像这样的用户 pojo:

public class UserPojo {    
    private String firstName;
    private String lastName;
}

在请求映射到来之后,我们检查用户是普通用户还是管理员。如果它是普通用户,我们只需将 GeneralPojoAllFields 映射到 UserPojo,它不会映射到 onlyAdminCanEditField 并从那里继续。

有一个更好的方法吗?

标签: javaspringroles

解决方案


首先,您的后端应尽可能独立于 UI。所以,UI 中的访问控制是一个很好的设计,但你不应该依赖它。

现在,回到你的问题,是的,你可以用它SecurityContextHolder来确定用户是否是普通用户/管理员。但是,如果可能的话,我建议制作两个控制器,一个用于管理员,一个用于普通用户。在管理控制器上使用@PreAuthorize以限制访问。拥有两个独立的控制器将极大地提高代码的可读性。

此外,您可以从两个控制器调用相同的服务类方法。由于您已经有两个 POJO 类,您可以使用它们@RequestBody并让 Spring 为您处理映射。


推荐阅读