假设这个类(在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/