向grails中的所有视图添加变量

向grails中的所有视图添加变量,grails,Grails,我试图在所有视图中为当前用户(POJO)设置一个变量,这样我就可以获得用户名之类的信息,并在每个视图(包括默认布局)上检查它们的角色。如何在grails中设置某些东西(例如currentUser),以便在每个grails视图中都可以访问它,如下所示: <div>${currentUser.name}</div> ${currentUser.name} 或者像这样: <g:if test="${currentUser.admin}">ADMIN</g:

我试图在所有视图中为当前用户(POJO)设置一个变量,这样我就可以获得用户名之类的信息,并在每个视图(包括默认布局)上检查它们的角色。如何在grails中设置某些东西(例如currentUser),以便在每个grails视图中都可以访问它,如下所示:

<div>${currentUser.name}</div>
${currentUser.name}
或者像这样:

<g:if test="${currentUser.admin}">ADMIN</g:if>
ADMIN

您可以使用会话作用域存储变量。您的呼叫将更改为:

<div>${session.currentUser.name}</div>
你想用一个。使用筛选器,可以指定要使用before/after和afterView方法拦截的控制器和方法(使用通配符)

这使得将一个新变量填充到模型中变得很容易,因此它在视图中可用。下面是一个使用acegi插件authenticateService的示例:

class SecurityFilters {

    def authenticateService

    def filters = {
        all(controller:'*', action:'*') {
            after = { model ->
                def principal = authenticateService.principal()
                if (principal != null && principal != 'anonymousUser') {
                    model?.loggedInUser = principal?.domainClass
                    log.debug("SecurityFilter: adding current user to model = $model")
                } else {
                    log.debug("SecurityFilter: anonymous user, model = $model")
                }
            }
        }
    }    
}
session.currentUser = XXXXX
class SecurityFilters {

    def authenticateService

    def filters = {
        all(controller:'*', action:'*') {
            after = { model ->
                def principal = authenticateService.principal()
                if (principal != null && principal != 'anonymousUser') {
                    model?.loggedInUser = principal?.domainClass
                    log.debug("SecurityFilter: adding current user to model = $model")
                } else {
                    log.debug("SecurityFilter: anonymous user, model = $model")
                }
            }
        }
    }    
}