繁体   English   中英

在Grails中使用Spring Security限制内容访问

[英]Using Spring Security in Grails to restrict content access

让我再次开始,说我还是Grails和Spring Security的新手。 我一直在尽力筛选文档,示例和示例。 这一切使我有些困惑或不知所措。

我正在尝试使用Spring来管理用户对信息的访问。 我有一个陷害的网站。 我希望管理员能够添加人员,与人员连接的位置以及位置的图像。 图片已连接到该人。 我希望登录的人只能看到他们的图片。

使用sec标签或@Secure注释或二者结合使用是更好还是最佳实践? 哪个最安全? 我使用sec:tags限制了访问。 我可以使用sec:tag选择要显示的图片吗?

我认为您可以以更简单的方式看待这个问题。 基本的插件安装基本上有3种管理安全性的方法。

  • @Secured-这使您可以锁定对整个Controller和/或单个动作的访问。 可以将其视为将URL锁定到一组特定角色。 更改此安全级别将需要重新部署。
  • 请求映射-与@Secured一样,您可以获得与@Secured相同的好处,并且具有在运行环境中修改控制器/操作安全性而不必重新部署的额外好处。
  • sec标签-使用这些标签可以锁定视图的呈现。 例如,允许一个角色显示一个编辑按钮,而另一角色隐藏它。 sec标签与以上方法结合使用。

基本上就是这样。 以上任何一个都不比另一个安全。 某些人似乎感到困惑的是“我的数据”的概念以及Spring Security如何处理它。 如果在Controller中希望用户只能访问其“图片”,则应仅基于经过身份验证的用户查询“图片”。

def authenticatedUser = User.findByUsername(springSecurityService.principal.username)
def pictures = Picture.findAllByUser(authenticatedUser)

然后,视图仅在乎您发送给它的图片。 每个登录的用户将只看到他们的图片。 如果管理员已登录,并且需要查看所有图片,则可以执行以下操作:

def authenticatedUser = User.findByUsername(springSecurityService.principal.username)
if (SpringSecurityUtils.ifAllGranted("ROLE_ADMIN")) {
   def pictures = Pictures.list() 
}

但是,出于管理目的,我可能只有一个单独的Controller,而不是尝试在一个Controller中执行过多的逻辑。 或者,将逻辑移至服务。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM