2009-02-02 16 views
5

Estoy usando el soporte de diseño (sitemesh) en Grails que funciona bien. Me gustaría ajustar mi diseño para que dependa de si un usuario está conectado o no.Accediendo al modelo desde una vista de diseño en Grails

Mi griales-app/views/layouts/main.gsp contiene el siguiente código:

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

Sin embargo, parece como si el esquema de SPG: s no pueden tener acceso al modelo y por lo tanto el usuario variable (Obtengo una excepción "No session" cuando intento). ¿Cuál sería la forma recomendada de hacer que mi diseño dependa de si un usuario está conectado o no?

¡Gracias de antemano!

Respuesta

9

Yo sugeriría utilizar la solicitud o el alcance de la sesión para tal fin. Probablemente, la forma más SECA es poblar el alcance es un filtro. Por ejemplo en el archivo griales-app/conf/SecurityFilters.groovy (que tendrá que crearlo):

class SecurityFilters { 

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

el ejemplo se supone que almacene el identificador del usuario actual en el "ID de usuario" atributo de sesión y que tiene un "Usuario" de clase de dominio. Usarlo en el diseño es tan simple como esto:

<g:if test="${request.user}"> 
    Current User: ${request.user.username} 
</g:if> 
Cuestiones relacionadas