Я пишу веб-приложение в Grails с плагином Acegi/Spring Security, и у меня возникают проблемы с его отображением изменений, которые я делаю для экземпляров пользователя , Я работаю только с Groovy/Grails около трех недель, поэтому, пожалуйста, простите меня, если эта проблема тривиальна, так как я просматриваю списки рассылки и учебные пособия, пытаясь найти ответ.Acegi/Spring Security Графический плагин не видит изменений в экземпляре пользователя
Я добавляю новые атрибуты в класс пользователя, когда мне нужен пользователь, чтобы содержать больше информации, такой как токен подтверждения электронной почты или настоящее имя, поскольку я не мог найти никаких рекомендаций об обратном. Кажется, все хорошо для создания новых пользователей, но когда я редактирую пользователя, изменения отображаются в списке пользователей, но библиотеки тегов Acegi и связанные с ними функции, похоже, не видят изменений.
Вот соответствующий отрывок из 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
}
После выполнения этого кода, я могу видеть изменения, если я всегда получаю данные пользователя по идентификатору, но если я использую тег Acegi или функций. Например, это не работает:
loggedInUserInfo(field:'realName')
Но это делает:
User.get(loggedInUserInfo(field:'id').toLong()).realName
Новая информация иногда появляется после того, как я выйти и снова, но обычно это не делает, часто не появляется даже после трех или более релогов. Кроме того, я попытался добавить «flush: true» к person.save() без эффекта.
(Peripheral вопрос: это плохо для меня, чтобы быть возился с классом пользователей, как это Если нет, то самый лучший способ, чтобы добавить информацию к нему?)
Update после более расследования: It похоже, если я использую loggedInUserInfo() на обычной странице, он отлично работает, но если я использую его внутри макета, он демонстрирует поведение, которое я описал. Может ли быть какое-то странное кэширование?
Спасибо за ссылку. Не могли бы вы привести пример того, как написать такой фильтр? Я больше не работаю над проектом, у которого есть проблема, но я уверен, что кто-то еще мог бы это увидеть. –
уверенный вещь. Руководство по фильтрам Grails находится здесь: http://www.grails.org/Filters, но короткая версия - это то, что вам просто нужно поместить этот файл фильтра в каталог grails-app/conf, и он работает. Cheers – sinjax
+1 - У меня была такая же проблема с ролями, и обходной фильтр, предоставленный в JIRA, решил проблему. –