我有一个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

来:
那么您认为存储菜单列表的更好方法是什么?
原因:
  • 由于用户的权限需要向用户显示不同的菜单。
  • 有时我们会更新Web应用程序,但希望稍后向用户显示菜单。
    所以我们只需要更改例如menu.visible。 (比更改硬代码cfg或源代码更好)。
  • 我们正在使用extjs来显示菜单(因此无法使用nav插件)。
  • 最佳答案

    Shiro使用$controller:$action约定获取权限。您有两种选择:

  • 使用Shiro标签
  • 直接使用Shiro API

  • 在第一种情况下,您可以在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 SourceShiro API docs

    关于grails - 如何检测shiro是否允许uri或从uri中提取 Controller 名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4415488/

    10-12 12:49