5

Grails で正常に動作するレイアウト サポート (sitemesh) を使用しています。ユーザーがログインしているかどうかに応じてレイアウトを調整したいと思います。

私の grails-app/views/layouts/main.gsp には次のコードが含まれています。

<g:if test="${user}">
  Username: ${user.username}
</g:if>

ただし、layout-GSP:s がモデルにアクセスできないため、ユーザー変数にアクセスできないように見えます (試行時に「セッションなし」例外が発生します)。ユーザーがログインしているかどうかに応じてレイアウトを変更するための推奨される方法は何ですか?

前もって感謝します!

4

1 に答える 1

10

その目的のために、リクエストまたはセッションスコープのいずれかを使用することをお勧めします。おそらく最もDRYな方法は、スコープにデータを入力することです。これはフィルターです。たとえば、ファイルgrails-app / conf / SecurityFilters.groovy(作成する必要があります):

class SecurityFilters {

    def filters = {
        populateCurrentUser(controller: '*', action: '*') {
            before = {
                 request.user = User.get(session.userId)
            }
        }
    }
}    

この例では、現在のユーザーのIDをセッション属性「userId」に格納し、ドメインクラス「User」があることを前提としています。レイアウトでの使用は次のように簡単です。

<g:if test="${request.user}">
   Current User: ${request.user.username}
</g:if>
于 2009-02-02T15:13:31.593 に答える