1

someController/someAction?param1=aa¶m2=bb のような uri があります

このuriからコントローラー名とアクション名を抽出できるgrailsの方法はありますか。

またはshiroには、このuriが許可されていることを検出する方法がありますか?


私はドメイン メニュー (名前、URL) を持っており、現在のユーザーに許可されているメニュー リストを取得したいと考えています。

/auth/login (user:login としてマッピングされている可能性があります)、/user/login などの URL

だから2日前に私はこの質問をします。

メニューを (name,controller,action,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}"
  }
}

下手な英語で申し訳ありません。返信ありがとうございます。

ところで、shiro をキャッシュする方法に関するもう 1 つの質問があります 。grails shiro でキャッシュ権限を使用する方法


大量に: メニューリストを保存するより良い方法は何だと思いますか? 原因:

  1. ユーザーの権限により、ユーザーに異なるメニューを表示する必要があります。
  2. ときどき webapp を更新しますが、後でユーザーにメニューを表示したいとします。そのため、menu.visible などを変更するだけです。(ハード コードの cfg やソースを変更するよりも優れています)。
  3. メニューを表示するためにextjsを使用しています(そのため、navプラグインは使用できません)。
4

1 に答える 1

3

Shiro は、$controller:$actionパーミッションに の規則を使用します。次の 2 つのオプションがあります。

  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 Tag Library SourceおよびShiro API docsを参照してください。

于 2010-12-13T16:47:04.403 に答える