java - 根据对象的字段值定义访问级别

标签 java grails spring-security shiro

假设这个类(在groovy中):

class Class_A {
    String type
    ...
}

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

最佳答案

据我所知,没有任何插件可以开箱即用地解决这个问题,但我已经使用 shiro 实现了项目,它确实限制了对对象的访问。

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

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

b) 过滤列表和搜索 - 没有适当权限的用户不应在概述列表和搜索结果中看到这些对象


我的解决方案:

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

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


我的b)解决方案:

在大多数项目中,您必须修改 ListView 并添加搜索。那么为什么不简单地添加搜索条件作为对象的过滤器呢?如果您使用条件生成器,添加附加条件很容易...但您必须确保以正确的方式完成分页和排序。

希望有帮助。

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

相关文章:

java - 在 Jersey 测试调用上设置查询参数

java - 在不使用 JnlpDownloadServlet 类的情况下启动 JNLP

grails - 何时使用 mock 以及何时使用带有 spock 的 stub?

grails - 如何在 Grails 中指定关联

java - 使用 hibernate 注解映射 @ManyToMany 关系

java - 安卓 Java : Camera2 preview image is stretched

grails - 使用特定的 id/email 保存到 grails

java - Spring MVC - 上传文件被spring security阻止

java - 无法解析 Maven 项目中的 Spring Security 类

java - Spring安全不允许资源,登录后浏览器只显示一个css文件?