根据用户角色隐藏内容?

use*_*858 4 grails spring-security

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

为了给你一些背景知识,这就是我的设置

  1. 具有映射的用户模型和角色模型的Web应用程序
  2. 根据用户访问限制某些控制器的登录功能.
  3. 我有每个页面上显示的菜单.

我知道如何限制控制器只允许有权访问的用户查看它但我现在要限制看到下面的菜单,除非正确的用户登录,我该怎么办呢?它是否与从控制器渲染该元素有关?

<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>
Run Code Online (Sandbox Code Playgroud)

Ian*_*rts 10

spring-security-core插件提供了一个taglib,可以帮助你

<sec:ifAnyGranted roles="ROLE_TESTER">
  <div class="nav">
    ...
  </div>
</sec:ifAnyGranted>
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 5

Ian很好地回答了你的问题,但我们应该在这里添加以保护服务器端控制器/操作,例如:

// At the controller level
@Secured(["hasRole('User')"])
class Testing

  // action specific
  @Secured(["hasAnyRole('SuperUser', 'Support', 'InternalUser')"])
  def test() {
      ...
  }
Run Code Online (Sandbox Code Playgroud)

否则,链接只是从视图中隐藏,但仍然可以由任何人执行.

HTH