我目前正在Grails开发一个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>
答案 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>