J'écris une application Web dans Grails avec le plug-in Acegi/Spring Security et je n'arrive pas à voir les modifications apportées aux instances User . Je travaille seulement avec Groovy/Grails depuis environ trois semaines, donc s'il vous plaît pardonnez-moi si ce problème est trivial, puisque j'ai été penché sur des listes de diffusion et des tutoriels en essayant de trouver la réponse. J'ai ajouté de nouveaux attributs à la classe de domaine User chaque fois que j'ai besoin d'un utilisateur pour contenir plus d'informations comme un jeton de confirmation d'email ou un vrai nom, puisque je n'ai trouvé aucune recommandation à l'effet contraire. Tout semble bien fonctionner pour créer de nouveaux utilisateurs, mais lorsque je modifie l'utilisateur, les changements apparaissent dans la liste des utilisateurs, mais les bibliothèques de balises Acegi et les fonctions associées ne semblent pas voir les changements.Le plug-in Acegi/Spring Security Grails ne voit pas les modifications apportées à une instance utilisateur
Voici l'extrait pertinent de UserController.update():
def person = User.get(params.id)
//...snip error checking...
//Update user attributes
person.username = params.email
person.email = params.email
person.userRealName = params.userRealName
//Attempt to save changes
if (person.save()) {
//If successful, redirect back to profile viewing page
redirect action: show, id: person.id
return
}
else {
//Otherwise, show errors and edit again
render view: 'edit', model: buildPersonModel(person)
return
}
Une fois ce code fonctionne, je peux voir les changements si je reçois toujours les données utilisateur par ID, mais pas si j'utilise les balises Acegi ou des fonctions. Par exemple, cela ne fonctionne pas:
loggedInUserInfo(field:'realName')
Mais cela ne:
User.get(loggedInUserInfo(field:'id').toLong()).realName
Les nouvelles informations parfois apparaît après que je vous déconnecter et à nouveau, mais le plus souvent il ne le fait pas, souvent ne pas apparaître même après trois ou plusieurs reloges. En outre, j'ai essayé d'ajouter "flush: true" à person.save() sans effet.
(question périphérique: est-il mauvais pour moi d'être jongler avec la classe utilisateur comme celui-ci Sinon, quelle est la meilleure façon d'ajouter des informations?)
Mise à jour après une enquête plus approfondie: Il On dirait que si j'utilise loggedInUserInfo() dans une page normale, cela fonctionne bien, mais si je l'utilise dans une mise en page, il présente le comportement que j'ai décrit. Pourrait-il y avoir quelque chose de caché bizarre?
Merci pour le lien. Pourriez-vous donner un exemple de comment écrire un tel filtre? Je ne travaille plus sur le projet qui a le problème, mais je suis sûr que quelqu'un d'autre pourrait bénéficier de le voir. –
chose sûre. Le guide des filtres de grails est ici: http://www.grails.org/Filters mais la version courte est qu'il suffit de mettre ce fichier de filtre dans votre répertoire grails-app/conf et cela fonctionne. Bravo – sinjax
+1 - J'ai eu le même problème avec les rôles, et le filtre de contournement fourni dans le JIRA a résolu le problème. –