眼看Grails的只是你自己的数据(Seeing only your own data in Gra

2019-07-03 16:34发布

这似乎是一个根本的问题,但我还没有找到一个明确的答案。 我使用的是Grails的弹簧安全核心插件,和我有谁有许多投资组合S2Users,和投资组合有很多交易。

当我去脚手架视角去审视交易,我怎么知道每个用户只能看到他自己的事务吗? 相反,我怎样才能创建一个可以查看所有用户的所有交易,用户?

这不是很清楚,我的默认行为是什么,以及如何Grails的/ Spring的保安都知道一个特定的领域类是否应该可见大家对那些只对相关的用户。

Answer 1:

当我去脚手架视角去审视交易,我怎么知道每个用户只能看到他自己的事务吗?

你将不得不修改其正常工作脚手架观点:

@Secured(['ROLE_USER'])
def list() {
   def authenticatedUser = User.findByUsername(springSecurityService.principal.username)
   def transactions = Transaction.findAllByUser(authenticatedUser)
   [transactions: transactions]
}

上面的代码将只允许通过认证的用户访问列表()方法,将获得登录用户的所有交易。

相反,我怎样才能创建一个可以查看所有用户的所有交易,用户?

你不创建一个可以一饱眼福用户,您可以创建在你的控制器的方法,允许特定用户看到他们所有的,例如:

@Secured(['ROLE_USER', 'ROLE_ADMIN'])
def list() {

   def authenticatedUser = User.findByUsername(springSecurityService.principal.username)
   def transactions = []
   if (SpringSecurityUtils.ifAnyGranted('ROLE_ADMIN')) {
       transactions = Transaction.list()
   }else{
       transactions = Transaction.findAllByUser(authenticatedUser)
   }
   [transactions: transactions]
}

类似的东西,反正。 根据需要调整。



Answer 2:

有插件,可以帮助您与此有关。 我使用Hibernate的过滤器插件为确切的目的,它可以帮助你限制SQL使每个用户只能看到他/她自己的数据。 然后,您可以用自己的执行HibernateFilterFilters,即禁止所有的过滤器,如果用户有ROLE_ADMIN(复制从插件源和适应)覆盖。

也有一些插件多租户,但那些维护似乎是不确定我。 我喜欢Hibernate的过滤器插件,它的简单和直接的 - 但你必须改变所有获得() - 以.findById()的调用,因为如何插件挂接到Grails的/格姆。



Answer 3:

如果数据访问规则更复杂,需要在所有的应用程序代码被执行,则可以使用弹簧安全的访问控制列表插件。



文章来源: Seeing only your own data in Grails