为什么在 Spring 安全性的 hasPermission 中使用“#post”而不是 "post"

Why use "#post" instead of "post" in hasPermission check in Spring Security

我是 spring 安全方面的新手。在分析下面的代码更改时,我无法理解为什么使用 "#post" 而不是 "post" ?为什么 "post" 这个词的前缀是“#”? post 是一个对象。

@PreAuthorize("hasPermission(#post, 'MANAGER') or hasRole('ROLE_MODERATOR')")
+   @PreAuthorize("hasPermission(#post, 'write') or hasRole('ROLE_MODERATOR')")
    public void updateFullyPost(Post post) throws AppException;

我参考了 spring 安全文档并找到了以下内容。

hasPermission(对象目标,对象权限) Returns 如果用户有权访问给定权限的提供目标,则为真。例如,hasPermission(domainObject, 'read')

第一个参数应该是目标对象。

有人可以指点一下吗?欣赏它。谢谢。

Spring Expression Language (SpEL) 中:

Variables can be referenced in the expression using the syntax #variableName.

当调用带有注释的方法时,如 @PreAuthorize,方法参数将作为变量传递给 SpEL。

如果省略 #,Spring 将在 根对象 中查找 属性,在本例中为 SecurityExpressionRoot。这是您找到 hasPermission 方法的地方。