Как определить, разрешен ли URI по Shiro или извлечь имя контроллера из URI? - PullRequest
1 голос
/ 11 декабря 2010

У меня есть URI, такой как someController / someAction? Param1 = aa¶m2 = bb

Есть ли какой-либо метод grails может извлечь имя контроллера и имя действия из этого URI.

илиУ Широ есть какой-либо метод, чтобы обнаружить, что этот URI разрешен?


У меня есть доменное Меню (имя, URL), и теперь я хочу получить список меню, который разрешен для текущего пользователя.

URL-адрес, такой как / auth / login (может отображаться как user: login), / user / login

, поэтому 2 дня назад я задал этот вопрос.

теперь я изменяю меню на(name, controller, action, param) и отфильтруйте menulist следующим образом:

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


Для proflux: так что, по вашему мнению, является лучшим способом хранения menulist?причина:

  1. это должно показать пользователю другое меню из-за его прав доступа.
  2. иногда мы обновляем веб-приложение, но хотим показать меню пользователю позже.поэтому нам нужно только изменить, например, menu.visible.(лучше, чем менять жесткий код cfg или source).
  3. мы используем extjs для отображения меню (поэтому плагин nav не может использоваться).

1 Ответ

3 голосов
/ 13 декабря 2010

Широ использует соглашение $controller:$action для разрешений. У вас есть два варианта:

  1. Используйте теги Широ
  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 .

...