Security 我可以在Grails2中做到这一点:使用Spring安全性保护单个选项卡吗

Security 我可以在Grails2中做到这一点:使用Spring安全性保护单个选项卡吗,security,grails,Security,Grails,如果我使用GrailsGUI选项之一(我应该使用哪一个)创建选项卡,是否可以根据当前用户打开和关闭选项卡?例如,只有具有管理员角色的用户才能查看“管理用户”选项卡。甚至匿名用户也应该看到主内容选项卡 理想情况下,我希望使用Spring安全ACL。是的,使用Acegi(Spring安全插件)是可能的,而且非常简单,请参阅。您需要定义一些角色,然后描述这些角色如何应用于不同的URL。示例(来自上面的链接): /admin/=角色用户 /book/test/=完全通过认证 /book/**=角色\主管

如果我使用GrailsGUI选项之一(我应该使用哪一个)创建选项卡,是否可以根据当前用户打开和关闭选项卡?例如,只有具有管理员角色的用户才能查看“管理用户”选项卡。甚至匿名用户也应该看到主内容选项卡


理想情况下,我希望使用Spring安全ACL。

是的,使用Acegi(Spring安全插件)是可能的,而且非常简单,请参阅。您需要定义一些角色,然后描述这些角色如何应用于不同的URL。示例(来自上面的链接):

/admin/=角色用户 /book/test/=完全通过认证 /book/**=角色\主管


在《Grails in Action》一书中也有关于如何做到这一点的解释

Spring Security为此提供了一个很好的标记库。您可以使用类似于以下内容的方法来分隔呈现选项卡:

<sec:authorize access="hasRole('supervisor')">

This content will only be visible to users who have
the "supervisor" authority in their list of <tt>GrantedAuthority</tt>s.

</sec:authorize>

此内容仅对具有以下权限的用户可见:
“主管”权限在其授权权限列表中。
您可以正常启用jsp标记:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>


阅读更多关于它的信息

只是为了添加,有时您可能会在视图(GSP)中添加太多的逻辑和编码。通过使用导航插件和Spring安全插件等其他选项,您可以将更多代码推送到控制器。好的是,视图只需删除条件标记即可

grails install-plugin navigation
然后在控制器中使用@Secured注释。例如,我创建了两个带有两个相应控制器的选项卡

@Secured(['ROLE_ADMIN'])
class SlidesController {

static navigation = [
    group:'tabs', order:10, title:'Users', action:'index'
]
def index = {
      .....
}

@Secured(['ROLE_ADMIN'])
class ProgramsController {

static navigation = [
    group:'tabs', order:10, title:'Programs & Presentation', action:'index'
]
def index = {
      .....
}
他认为:

<head>
     ... other head elems.
  <nav:resources/>
</head>

<body>
<nav:render/>
    ... Your other stuff
</body>

... 其他头部元素。
... 你的其他东西
选项卡将自动显示(使此视图成为布局GSP也很有用)


谢谢您的回复。这解决了保护URL的问题。但是,要求是在同一页面上设置安全的特定选项卡。我的应用程序原型(使用ZK完成,我对此有疑问)位于。如果同一页面的意思是,用于呈现所有选项卡的HTML在同一个http请求中发送,那么你就不走运了-你的应用程序的安全层设计需要更改,以便不发送安全内容。通过url进行隔离(然后使用ajax加载选项卡的内容)更容易、更模块化。很高兴最近得到了我3年前提出的这个问题的一些答案!自从Grails2.x发布以来,这个标题有了新的含义。当我以前写这个问题时,这是我的第二个“我能在Grails中做到这一点吗”问题:)我没有看到日期。一定有人更新了它,它出现在新grails问题列表的顶部。