Grails 根据用户角色隐藏内容?

Grails 根据用户角色隐藏内容?,grails,spring-security,Grails,Spring Security,我目前正在Grails中开发一个web应用程序,我正在寻找一种基于当前登录到解决方案的用户隐藏菜单的方法 给你一点背景知识,这是我设置的 具有映射的用户模型和角色模型的web应用程序 基于用户访问权限限制某些控制器的登录功能 我有菜单显示在每一页上 我知道如何将控制器限制为只允许有权查看它的用户,但我现在想限制看到下面这样的菜单,除非正确的用户登录,我如何才能做到这一点?它是否与从控制器渲染该元素有关 <div class="nav"> <ul class"nav">

我目前正在Grails中开发一个web应用程序,我正在寻找一种基于当前登录到解决方案的用户隐藏菜单的方法

给你一点背景知识,这是我设置的

  • 具有映射的用户模型和角色模型的web应用程序
  • 基于用户访问权限限制某些控制器的登录功能
  • 我有菜单显示在每一页上
  • 我知道如何将控制器限制为只允许有权查看它的用户,但我现在想限制看到下面这样的菜单,除非正确的用户登录,我如何才能做到这一点?它是否与从控制器渲染该元素有关

    <div class="nav">
      <ul class"nav">
        <li>
          <g:link class="Tester" controller="Testing" action="test">
            <g:message code="Tester" args"[entityName]" />
          </g:link>
        </li>
        <li>
          <g:link class="Tester2" controller="Testing" action="test2">
            <g:message code="Tester2" args"[entityName]" />
          </g:link>
        </li>
      </ul>
    </div>
    
    
    
    

  • spring security core插件提供了一个可以帮助您的

    <sec:ifAnyGranted roles="ROLE_TESTER">
      <div class="nav">
        ...
      </div>
    </sec:ifAnyGranted>
    
    
    ...
    
    如果您不使用spring security核心插件,可以实现以下功能

    <g:if test="${userHaveRightRole}">
     <div class="nav">
        ...
      </div>
    </g:if>
    
    
    ...
    
    Ian很好地回答了您的问题,但我们应该在此处添加以保护服务器端控制器/操作,例如:

    // At the controller level
    @Secured(["hasRole('User')"])
    class Testing
    
      // action specific
      @Secured(["hasAnyRole('SuperUser', 'Support', 'InternalUser')"])
      def test() {
          ...
      }
    
    否则,链接只是从视图中隐藏,但仍然可以由任何人执行


    HTH

    谢谢你的建议,我已经在做这件事来保护控制器的安全,但我很感谢你提供的信息。