2010-12-11 111 views
1

通過四郎或提取控制器名稱允許我有一個URI如someController/someAction?參數1 = AA & param2的= BB如何檢測URI是否是從URI

是存在的grails可以提取控制器名稱的一些方法和這個uri的動作名稱。

或shiro有任何方法來檢測此uri是否允許?


我有一個域菜單(名稱,網址),現在想獲得當前用戶允許的菜單列表。

URL諸如/ AUTH /登錄(可以是映射爲用戶:登錄),/用戶/登錄

SO 2天前,我提出這個問題。

現在我改變菜單(姓名,控制器,動作,PARAM),和過濾菜單列表如下:

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}" 
    } 
} 

對不起我的英語不好,感謝您的答覆。

順便說一句,這裏是如何緩存四郎另一個問題: how to use cache permissions in grails shiro


要proflux: 那麼ü認爲什麼是更好的方式來存儲的菜單列表? 原因:

  1. 由於其權限,它需要向用戶顯示不同的菜單。
  2. 有時候我們更新了一個webapp,但想稍後向用戶顯示菜單。 所以我們只需要改變如menu.visible。 (比改變硬代碼cfg或源代碼更好)。
  3. 我們正在使用extjs來顯示菜單(所以導航插件無法使用)。
+0

對不起,因爲我不明白這個問題,你能舉個例子嗎? – 2010-12-13 02:59:06

+0

我只是認爲,如果我有一個網址,如何將其更改爲控制器+操作。可能/ auth/login映射到用戶:登錄 – atian25 2010-12-14 09:09:37

+0

你能幫我理解爲什麼你將用戶界面菜單存儲在一個域類中嗎? – proflux 2010-12-15 17:45:14

回答

3

Shiro使用約定$controller:$action作爲權限。你有兩個選擇:

  1. 使用四郎標籤
  2. 使用四郎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

+0

感謝您的回覆。我只是想,如果我有一個網址,如何將其更改爲控制器+操作。也許/ auth/login映射到用戶:登錄 – atian25 2010-12-14 02:19:00

+0

在您的應用程序中,您需要進行此項檢查?我已經使用Shiro和Grails相當多,如果最終出現這種情況,可能是因爲您沒有充分利用Shiro和/或Grails提供的功能。如果你可以發佈一些更多的細節,我可以幫你找出問題所在。在你想做這個測試的地方張貼代碼片段,我們將從那裏開始...... – proflux 2010-12-14 16:41:04

相關問題