根据用户角色隐藏内容?

时间:2012-09-25 12:35:48

标签: grails spring-security

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

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

  1. 具有映射的用户模型和角色模型的Web应用程序
  2. 根据用户访问限制某些控制器的登录功能。
  3. 我有每个页面上都显示的菜单。
  4. 我知道如何限制控制器只允许有权访问的用户查看它但我现在要限制看到下面的菜单,除非正确的用户登录,我该怎么做?它与从控制器渲染该元素有什么关系吗?

    <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>
    

3 个答案:

答案 0 :(得分:10)

spring-security-core插件提供taglib可以帮助你

<sec:ifAnyGranted roles="ROLE_TESTER">
  <div class="nav">
    ...
  </div>
</sec:ifAnyGranted>

答案 1 :(得分:5)

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

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

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

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

HTH

答案 2 :(得分:0)

如果你没有使用spring-security-core插件,可以实现以下

<g:if test="${userHaveRightRole}">
 <div class="nav">
    ...
  </div>
</g:if>