4

現在、GrailsでWebアプリを開発しており、ソリューションにログインしている現在のユーザーに基づいてメニューを非表示にする方法を探しています。

少し背景を説明するために、これは私が設定したものです

  1. マップされたユーザーモデルとロールモデルを備えたWebアプリ
  2. ユーザーのアクセスに基づいて特定のコントローラーを制限するログイン機能。
  3. 各ページに表示されるメニューがあります。

コントローラーを制限して、アクセス権を持つユーザーのみがコントローラーを表示できるようにする方法を知っていますが、適切なユーザーがログインしていない限り、以下のようなメニューが表示されないように制限したいのですが、どうすればよいですか?コントローラからその要素をレンダリングすることと関係がありますか?

<div class="nav">
  <ul class"nav">
    <li>
      <g:link class="Tester" controller="Testing" action="test">
        <g:message code="Tester" args"[entityName]" />
      </g:link>
    </li>
    <li>
      <g:link class="Tester2" controller="Testing" action="test2">
        <g:message code="Tester2" args"[entityName]" />
      </g:link>
    </li>
  </ul>
</div>
4

3 に答える 3

10

spring-security-core プラグインは、ここで役立つtaglibを提供します

<sec:ifAnyGranted roles="ROLE_TESTER">
  <div class="nav">
    ...
  </div>
</sec:ifAnyGranted>
于 2012-09-25T12:42:30.103 に答える
5

イアンはあなたの質問にうまく答えましたが、サーバー側のコントローラー/アクションを保護するために、次のように追加する必要があります。

// At the controller level
@Secured(["hasRole('User')"])
class Testing

  // action specific
  @Secured(["hasAnyRole('SuperUser', 'Support', 'InternalUser')"])
  def test() {
      ...
  }

そうしないと、リンクは非表示になり、誰でも実行できるようになります。

HTH

于 2012-09-26T03:51:24.637 に答える
0

spring-security-core プラグインを使用していない場合は、以下を実装できます

<g:if test="${userHaveRightRole}">
 <div class="nav">
    ...
  </div>
</g:if>
于 2012-09-25T12:49:10.900 に答える