2009-02-02 12 views
5

Ich verwende die Layout-Unterstützung (Sitemesh) in Grails, die gut funktioniert. Ich möchte mein Layout so anpassen, dass es davon abhängt, ob ein Benutzer angemeldet ist oder nicht.Zugriff auf das Modell aus einer Layoutansicht in Grails

Mein Grails-app/views/layout/main.gsp enthält den folgenden Code:

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

Jedoch scheint es, als ob die Layout-APS: s sind nicht in der Lage, das Modell zugreifen und damit der Benutzer Variable (Ich bekomme eine "No Session" -Ausnahme beim Versuch). Was wäre der empfohlene Weg, um mein Layout davon abhängig zu machen, ob ein Benutzer angemeldet ist oder nicht?

Vielen Dank im Voraus!

Antwort

9

Ich würde vorschlagen, entweder den Antrag oder den Sitzungsumfang für diesen Zweck zu verwenden. Wahrscheinlich ist der DRY-Weg, den Bereich zu füllen, ein Filter. Zum Beispiel in der Datei Grails-app/conf/SecurityFilters.groovy (Sie werden es schaffen müssen):

class SecurityFilters { 

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

Das Beispiel geht davon aus, dass Sie die ID des aktuellen Benutzers in der Sitzung Attribut „userId“ speichern und dass Sie eine Domain-Klasse "Benutzer" haben. Die Verwendung im Layout ist so einfach:

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