2014-03-13 39 views
0

我正在研究一个项目,我们有要求为用户提供现场级访问的项目。grails现场级安全 - spring acl

例子:

假设有几个领域

应用程序名为employee的实体应留在实体的字段级安全访问。

根据访问权限允许用户编辑/读取字段。

我们想到了一个使用spring acl的实现,但它提供了实例级别的安全性。

有人请让知道一个优雅的方式来实现它吗?

在此先感谢。

回答

0

看看fields plugin

它允许您控制如何渲染单个字段。

您可以在每个字段的_field.gsp片段中实施安全检查,或者您可以覆盖该插件的taglib的f:all方法并在其中添加安全检查。

0

你可以使用该插件,但你需要做一些额外的工作。 Spring Security中的ACL支持基本上可以让你说“在对象实例y(类型”foo“)上授予许可x,其中id为z给予人员p”。有一个带有标准实例的示例权限类,如Read,Write,Admin等,但底层基础结构只能与数字1,2,4,8等一起工作,因此您可以轻松定义自己的权限类型 - 真的只是将人类可读的名字映射到数字。您通常会授予域对象实例的权限,但是在底层,域类的名称只是字符串,因此您可以在其中存储任何类型名称。 ID可以是任何值,例如一个数字或一个字符串。

您将无法在服务方法上使用@PreAuthorize和@PostFilter注释,但仍然可以查询ACL bean,以查看给定字段或任何您想要的内容,当前已通过身份验证的用户是否被允许执行一些操作。

+0

这意味着我们需要使用每个字段的权限,在这种情况下,每个字段将是每个字段的读取和编辑选项。我正在考虑在对象上拥有这些权限,并根据这些权限修改对象并将编辑的对象返回,以移除不可访问的字段。为此,我们可以创建一个自定义评估器并覆盖haspermissions方法来实现此逻辑。但我不确定这是否是正确的做法?我们还有一个讨论,有我们自己的acl,我们可以使用spring acl来解决现场级别的许可。 – user3363354