有人可以解释 Spring Security BasePermission.Create 吗?

Posted

技术标签:

【中文标题】有人可以解释 Spring Security BasePermission.Create 吗?【英文标题】:Could someone explain Spring Security BasePermission.Create? 【发布时间】:2011-02-13 14:32:18 【问题描述】:

我正在从事一个涉及 Spring Security ACL 的项目,我遇到了创建权限 BasePermission.CREATE。有人能解释一下这应该如何工作或它允许某人做什么吗?

据我了解,每个对象都有一个acl,每个acl都有很多ace,每个ace都有一个sid和一个permission。如果必须创建对象才能将 acl 附加到它,您如何授予对象创建权限?

【问题讨论】:

【参考方案1】:

Spring 安全性通过ObjectIdentity 接口间接授予域对象的权限。

正如您所提到的,到目前为止,通常的情况是您首先创建或获取域对象,然后为域对象构造一个ObjectIdentityImpl

MyDomainObject secured = new MyDomainObject();
ObjectIdentity securedIdentity = new ObjectIdentityImpl(secured);

然后,您可以使用 ObjectIdentity 实例通过 spring 安全框架检索 ACL。

但是,这不是使用对象标识的唯一方法。您可以传递对 objectIdentity 的引用,该引用不是实际的业务对象,但如果它已创建,则可以通过某种方式识别它。

例如,假设我们想要保护文件。我们可以使用受保护的java.io.File 实例创建 ObjectItentity。身份中的 File 对象只是对文件的引用 - 它不是实际文件 - 文件甚至可能不存在,但我们有一个 ObjectIdentity,然后我们可以推断安全性并为其获取 ACL。

这种模式可以应用于任何类型的领域对象。创建一个DomainObjectPrototype 实现,它根据保护域对象所需的域特性来描述域对象,但实际上并不需要对域对象的引用。您可以将其视为某些服务实际创建该域对象所需的详细信息。

PS:让我承认我从未使用过 Spring Security,但是在查看 example 之后,我觉得设计模式似乎很清楚。

编辑:我已对此进行了更新,希望它更清晰 - 没有必要像我最初写的那样创建 ObjectIdentity 的实现。

【讨论】:

感谢您的回复。不过我想澄清一下。你的意思是如果我想限制一个 Widget 类的创建,我可能会做如下的事情? ObjectIdentitysecureIdentity = new ObjectIdentityImpl(Widget.class,Widget.RESERVED_CLASS_ID);然后我会检查是否允许某些 sid 的创建权限。 当访问控制不依赖于 Widget 类的具体实例时,您可以这样做。如果您需要特定于实例的控制,则创建一个包含定义访问控制所需的域属性的 WidgetPrototype 类。【参考方案2】:

从更广泛的角度考虑,有两种类型的权限:类和实例。对象创建是类权限 - 您有权创建新实例。当您尝试将其应用于单个实例时,它是没有意义的。读取权限可以是任何一个。您可以拥有读取所有实例的权限,或者您可能只拥有读取少数显式枚举实例的权限。

如果您感到困惑,请想想经典的“生日派对电子邮件”问题。这是一封发送给除生日男孩之外的所有人的办公室电子邮件,用于计划惊喜生日派对。在这种情况下,您需要类 CREATE 权限来创建和发送电子邮件,并且每个人都具有类 READ 权限来阅读邮件。但是,一个人拥有实例 DENY READ 权限,因此他一个人无法阅读该消息。

【讨论】:

我了解需要 CREATE 权限。我的问题是如何专门在 Spring Security 中使用它。不过谢谢。

以上是关于有人可以解释 Spring Security BasePermission.Create 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Spring security SAML IDP 发起的 SSO

使用 Spring Security saml 的 IDP 会话超时

请解释spring MVC,hibernate和Spring security

Grails Spring Security 插件和 GSP 标签不起作用

Spring security OAuth 2.0 的一个简单解释

spring security 控制用户信息用户加密 缓存用户信息