Доступ к модели из вида компоновки в Grails

Я использую поддержку макета (sitemesh) в Grails, которая отлично работает. Я хотел бы настроить свой макет так, чтобы он зависел от того, вошел ли пользователь в систему или нет.

Мой grails-app / views / layouts / main.gsp содержит следующий код:

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

Однако создается впечатление, что layout-GSP: s не может получить доступ к модели и, следовательно, к пользовательской переменной (при попытке я получаю исключение «Нет сеанса»). Каким будет рекомендуемый способ сделать мой макет зависимым от того, вошел ли пользователь в систему или нет?

Заранее спасибо!


person knorv    schedule 02.02.2009    source источник


Ответы (1)


Я бы предложил использовать для этой цели либо запрос, либо область сеанса. Вероятно, самый СУХИЙ способ заполнить область видимости - это фильтр. Например, в файле grails-app / conf / SecurityFilters.groovy (вам нужно его создать):

class SecurityFilters {

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

В примере предполагается, что вы храните идентификатор текущего пользователя в атрибуте сеанса «userId» и что у вас есть класс домена «User». Использовать его в макете очень просто:

<g:if test="${request.user}">
   Current User: ${request.user.username}
</g:if>
person Siegfried Puchbauer    schedule 02.02.2009