【问题标题】:how to detect whether a uri is allow by shiro or extract controller name from uri如何检测shiro是否允许uri或从uri中提取控制器名称
【发布时间】:2011-05-23 20:43:17
【问题描述】:

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

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

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


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

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

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

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

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


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

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

【问题讨论】:

  • 对不起,我无法回答这个问题,你能给我举个例子吗?
  • 我只是认为如果我有一个 url,如何将其更改为控制器 + 动作。也许 /auth/login 正在映射到 user:login
  • 您能帮我理解您为什么将用户界面菜单存储在域类中吗?

标签: grails shiro url-mapping


【解决方案1】:

Shiro 使用$controller:$action 的约定来获取权限。你有两个选择:

  1. 使用 Shiro 标签
  2. 直接使用 Shiro API

在第一种情况下,您可以在 GSP 中添加如下内容:

<shiro:hasPermission permission="someController:someAction">
     <g:link...>
</shiro:hasPermission>
<shiro:lacksPermission permission="someController:someAction">
     No link
</shiro:lacksPermission>

或者,您可以使用 &lt;g:if...&gt; 标记并使用

SecurityUtils.subject.isPermitted("someController:someAction")

直接检查用户是否具有必要权限的方法。

如需了解更多信息,请查看Grails Shiro Tag Library SourceShiro API docs

【讨论】:

  • 感谢您的回复。我只是认为,如果我有一个 url,如何将其更改为控制器 + 动作。也许 /auth/login 正在映射到 user:login
  • 您需要在应用程序的哪个位置进行此项检查?我用过 Shiro 和 Grails 很多次,如果你最终遇到这种情况,可能是因为你没有充分利用 Shiro 和/或 Grails 提供的功能。如果您可以发布更多详细信息,我可能可以帮助您找出问题所在。将一段代码发布到您要进行此测试的地方,我们将从那里开始......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2021-08-13
  • 2018-05-01
  • 2012-10-28
  • 2015-01-14
相关资源
最近更新 更多