2009-02-02 9 views
5

Sto utilizzando il supporto layout (sitemesh) in Grails che funziona correttamente. Mi piacerebbe adattare il mio layout in modo che dipenda dal fatto che un utente abbia o meno un accesso.Accesso al modello da una vista layout in Grails

mio graal-app/views/layout/main.gsp contiene il seguente codice:

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

Tuttavia, sembra come se il layout-GSP: s sono in grado di accedere al modello e quindi l'utente variabile (ottengo un'eccezione "Nessuna sessione" durante il tentativo). Quale sarebbe il modo consigliato per fare in modo che il mio layout dipenda dal fatto che un utente abbia o meno un accesso o meno?

Grazie in anticipo!

risposta

9

Suggerisco di utilizzare la richiesta o l'ambito della sessione a tale scopo. Probabilmente il modo più DRY è quello di popolare l'ambito è un filtro. Per esempio nel file graal-app/conf/SecurityFilters.groovy (avrete bisogno di crearlo):

class SecurityFilters { 

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

L'esempio presuppone che si memorizza l'id dell'utente corrente nella "UserID" attributo sessione e che hai una classe di dominio "Utente". Usarlo nel layout è semplice come questo:

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