4

我目前正在 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>
4

3 回答 3

10

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

<sec:ifAnyGranted roles="ROLE_TESTER">
  <div class="nav">
    ...
  </div>
</sec:ifAnyGranted>
于 2012-09-25T12:42:30.103 回答
5

伊恩很好地回答了您的问题,但我们应该在此处添加以保护服务器端控制器/操作,例如:

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

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

否则,链接只是隐藏在视图之外,但仍然可以由任何人执行。

高温高压

于 2012-09-26T03:51:24.637 回答
0

如果您不使用 spring-security-core 插件,则可以实现以下

<g:if test="${userHaveRightRole}">
 <div class="nav">
    ...
  </div>
</g:if>
于 2012-09-25T12:49:10.900 回答