1

我有一个 uri,例如 someController/someAction?param1=aa¶m2=bb

是否有一些 grails 方法可以从这个 uri 中提取控制器名称和动作名称。

或者 shiro 有什么方法可以检测到这个 uri 是允许的吗?


我有一个域菜单(名称,url),现在想要获取当前用户允许的菜单列表。

url 例如 /auth/login(可能映射为 user:login), /user/login

所以2天前我问了这个问题。

现在我将菜单更改为(名称、控制器、操作、参数),并像这样过滤菜单列表:

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 的另一个问题: 如何在 grails shiro 中使用缓存权限


To proflux:那么你认为存储菜单列表的更好方法是什么?原因:

  1. 由于用户的权限,它需要向用户显示不同的菜单。
  2. 有时我们更新一个 web 应用程序,但想稍后向用户显示菜单。所以我们只需要改变比如一个menu.visible。(比更改硬代码 cfg 或源代码更好)。
  3. 我们正在使用 extjs 来显示菜单(所以导航插件不能使用)。
4

1 回答 1

3

Shiro 使用$controller:$actionfor 权限的约定。你有两个选择:

  1. 使用 Shiro 标签
  2. 直接使用 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 标记库源Shiro API 文档

于 2010-12-13T16:47:04.403 回答