在我的项目中,我有3个实体:A * 用户**、项目和任务。用户可以创建任务,但任务属于项目而不是他自己,并且项目中可以有多个用户。
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来验证Task**是否属于用户所在的项目?
@PreAuthorize("authentication.principal.userId == #???")
@GetMapping("/task/{taskId}")
public Task getTask(String taskId) {
}
1条答案
按热度按时间hfsqlsce1#
您可以在SpEl表达式中引用路径变量(或使用@RequestBody和@RequestHeader注解的变量),引用时在变量名的开头加上
#
符号。如果您想检查返回的
Task
示例的id是否与主体的id匹配,则需要使用@PostAuthorized
(*@PreAuthorize
是不可行的,因为需要执行该方法来评估条件,即您需要首先获取对象,以确定该用户是否可以访问它 *)。要在SpEl中引用该方法生成的对象,请使用
returnObject
(不要在前面添加散列符号)。