我有一个uri,例如someController / someAction?param1 = aa&param2 = bb
有没有一些grails的方法可以从此uri提取 Controller 名称和操作名称。
或shiro是否有任何方法可以检测到此uri?
我有一个域Menu(name,url),现在想获取当前用户允许的菜单列表。
网址,例如/ auth / login(可能映射为user:login),/ user / login
所以两天前我问这个问题。
现在我将菜单更改为(名称, Controller ,操作,参数),并过滤菜单列表,如下所示:
def subject = SecurityUtils.subject;
menuList.each{
if(it.permission){
def perm = shiroPermissionResolver.resolvePermission("${it.permission.controller}:${it.permission.action}")
def isPermitted = subject.isPermitted(perm)
println "$isPermitted -> ${it.permission.controller}:${it.permission.action}"
}
}
对不起,我的英语不好,谢谢你的答复。
顺便说一句,这是另一个有关如何缓存shiro的问题:
how to use cache permissions in grails shiro
来:
那么您认为存储菜单列表的更好方法是什么?
原因:
所以我们只需要更改例如menu.visible。 (比更改硬代码cfg或源代码更好)。
最佳答案
Shiro使用$controller:$action
约定获取权限。您有两种选择:
在第一种情况下,您可以在GSP中添加以下内容:
<shiro:hasPermission permission="someController:someAction">
<g:link...>
</shiro:hasPermission>
<shiro:lacksPermission permission="someController:someAction">
No link
</shiro:lacksPermission>
或者,您可以使用
<g:if...>
标记并使用SecurityUtils.subject.isPermitted("someController:someAction")
直接检查用户是否具有必要权限的方法。
有关更多信息,请查看Grails Shiro Tag Library Source和Shiro API docs。
关于grails - 如何检测shiro是否允许uri或从uri中提取 Controller 名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4415488/