2009-11-13 5 views
4

J'essaie de définir une variable pour l'utilisateur actuel (un POJO) dans toutes les vues afin que je puisse obtenir des choses comme le nom d'utilisateur et vérifier leur rôle sur chaque vue (y compris la disposition par défaut). Comment puis-je quelque chose de configuration (par exemple currentUser) dans Grails afin qu'il soit accessible à tous les Grails voir comme ceci:Ajouter une variable à toutes les vues dans les grails

<div>${currentUser.name}</div> 

ou comme ceci:

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

Répondre

4

Vous pouvez utiliser la portée de session pour stocker les variable. Vos appels changeraient à:

<div>${session.currentUser.name}</div> 

et

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

Et vous devez définir la variable comme si dans un contrôleur:

session.currentUser = XXXXX 
11

Vous voulez utiliser un grails filter. À l'aide d'un filtre, vous pouvez spécifier les contrôleurs et les méthodes (en utilisant des caractères génériques) que vous souhaitez intercepter à l'aide des méthodes before/after et afterView. Cela permet de placer facilement une nouvelle variable dans le modèle afin qu'elle soit disponible dans une vue. Voici un exemple qui utilise le plugin 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") 
       } 
      } 
     } 
    }  
} 
Questions connexes