Доступ к модели из макета в Grails
Я использую поддержку макета (sitemesh) в Grails, который работает нормально. Я хотел бы изменить свой макет, чтобы он зависел от того, вошел ли пользователь в систему или нет.
Мой grails-app/views/layouts/main.gsp содержит следующий код:
<g:if test="${user}">
Username: ${user.username}
</g:if>
Однако создается впечатление, что компоновщики GSP не могут получить доступ к модели и, следовательно, к пользовательской переменной (я получаю исключение "Нет сеанса" при попытке). Каков будет рекомендуемый способ сделать мой макет зависимым от того, вошел ли пользователь в систему или нет?
Заранее спасибо!
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>