当前位置: 首页 > 知识库问答 >
问题:

Spring, 如何验证用户是否是对象的所有者

陈增
2023-03-14

在我的项目中,我有 3 个实体用户、项目和任务。用户可以创建任务,但该任务将属于项目而不是他,并且一个项目中可以有多个用户。

data class User(
  val userId: String,
)

data class Project(
  val projectId: String,
  val taskIds: List<String>,
  val userIds: List<String>
)

data class Task(
  val taskId: String
)

所以如果数据结构是这样的。如何使用@PreAuthorize来验证任务是否属于用户所在的项目。

@PreAuthorize("authentication.principal.userId == #???")
@GetMapping("/task/{taskId}")
public Task getTask(String taskId) {
}

共有1个答案

宰父夕
2023-03-14

您可以在 SpEl 表达式中引用路径变量(或用 @RequestBody 和 @RequestHeader 批注的变量),使用其名称并在开头加上 # 符号。

@PreAuthorize("principal.userId == #taskId")
@GetMapping("/task/{taskId}")
public Task getTask(@PathVariable String taskId) {
    // ...
}

如果您有兴趣检查重新调整的 Task 实例的 id 是否与原则的 id 匹配,则需要使用 @PostAuthorized这@PreAuthorize不可行,因为需要执行该方法以评估条件,即您需要首先获取对象以决定该用户是否可以访问它)。

并且要引用由 SpEl 中的方法生成的对象,请使用 returnObject(不要在前面加上哈希符号)。

@PostAuthorize("principal.userId == returnObject.taskId")
@GetMapping("/task/{taskId}")
public Task getTask(@PathVariable String taskId) {
    // ...
}
 类似资料:
  • 我是一个新的论坛和Appium/Android自动化,我需要帮助,以验证对象是否存在我的应用程序之前,我采取下一个行动。 信息:[BOOTSTRAP][info]返回结果:{“value”:“未找到元素”,“status”:7} 信息:将命令推送到appium工作队列:[“find”,{“strategy”:“name”,“selector”:“John Doe”,“context”:“”,“mu

  • 例如,在UserRepository对象(用@Repository(“UserRepository”)注释)中调用save(User entity)(CrudRepository implementation)方法的UserService对象之后,如何验证该对象确实被保存并且没有问题。 几乎所有的教程都倾向于忽略这种情况,并使服务类中的save(User User)方法无效。

  • 我试图比较两个大的JavaScript对象,每个对象大约有200个键,键是无序的,每个JavaScript对象的值都不同,但我只关心键,如果它们都有相同的键集,那么即使它们的顺序不同,函数也会返回true 我尝试了下面的代码但没有工作 例子:

  • 问题内容: 我只是写了这个单元测试: 输出为: 的图案是与是使用把字符串日期日期对象的方法的库。 为什么des.java.util.Date对象验证日期有效性? 问题答案: 您需要进行设置,以使SimpleDateFormat严格验证您的输入。 您可以参考setLenient文档以进一步了解。根据定义,

  • 问题内容: 我需要进行以下测试,以验证是否已调用Person类的所有getter。到目前为止,我已经使用了Mockito的verify()来确保每个getter都被调用。有没有办法通过反思做到这一点?可能是将新的吸气剂添加到Person类的情况,但是测试会错过这一点。 问题答案: 通常,不要嘲笑被测类。如果您的测试是针对Person的,则您永远都不会看到它,因为这很明显地表明您正在测试模拟框架而不

  • 我正在客户端使用带有标准Facebook登录按钮的Facebook Javascript SDK。当用户单击按钮时,我会从Facebook获得用户id。稍后,我将从服务器端使用Facebook PHP SDK。我想检查用户id是否是真实的用户id。我搜索了一些资源,但我不知道我的方法是否正确。我使用访问令牌。我的链接在上面。当我发送请求时,收到一个错误。客户端id是我的应用程序id,客户端机密是密

  • 我需要一个PDO函数,如果用户course_id已经存在,它将返回false。 这是我的学生表列 标准标识 A这是我的课程表 课程编号 我还有报名表 id 我需要验证用户是否已经使用PHP PDO函数学习了一门课程,以及学习了特定课程的学生人数。