假设此类(常规):

class Class_A {
    String type
    ...
}

我想根据类型的值定义对其实例的访问级别。例如,如果类型值为“T1”,则某些用户将对Class_A具有读取访问权限,如果类型值为“T2”,则其他用户将具有对它们的读取访问权限。
请不要提供基于继承的解决方案。我可以使用spring-security或apache shiro吗?

最佳答案

据我所知,没有开箱即用的插件可以解决此问题,但是我用shiro实现了一些项目,这些项目确实限制了对对象的访问。

您的问题将分为两个独立的问题:

a)限制对对象的直接访问-没有权限的用户应该不能访问显示页面的那些对象

b)过滤列表和搜索-未经正确许可的用户不应在概述列表和搜索结果中看到这些对象

我对a)的解决方案:

创建一个过滤器类(http://grails.org/doc/latest/guide/single.html#filters)并为每个 Controller 添加一个before -filter,它可以显示要保护的对象。在此过滤器中,您可以预提取对象并检查权限。如果不匹配,则可以重定向到拒绝访问页面。 (Hibernate似乎足够聪明,可以在 Controller 中第二次请求时从缓存中获取对象)

顺便说一句:这样,您还可以实现其他隐式权限和角色(例如,仅当用户自己创建对象时才显示对象)

我对b)的解决方案:

在大多数项目中,您必须修改列表 View 并添加搜索。那么,为什么不简单地添加搜索条件作为对象的过滤器呢?如果您使用条件构建器,则添加其他条件很容易...但是您必须确保以正确的方式进行分页和排序。

希望能有所帮助。

关于java - 根据对象的字段值定义访问级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11806628/

10-12 00:19
查看更多