GSP, если при тестировании возвращается false при проверке, является ли зарегистрированный пользователь с Spring Security Core Plugin создателем экземпляра класса домена - PullRequest
0 голосов
/ 22 ноября 2011

Я использую Плагин ядра безопасности Spring .

Я хочу проверить, является ли зарегистрированный пользователь создателем Заметки.Примечание - это класс домена Grails.Note.creator - это пользователь, который является моим классом домена пользователя для плагина Spring Security Core.

Следующий код не работает

<g:set var="loggedUserId"><sec:loggedInUserInfo field="id"/></g:set>
<g:if test="${note.creator.id == loggedUserId}">
   Never jumps here
</g:if>

Однако, если я включу оба значения в разделенные строки,вывод обоих одинаков

${note.creator.id}
${loggedUserId}

Есть идеи, что мне не хватает?Спасибо заранее!

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011
<g:if test="${note.creator.id.toString() == loggedUserId.toString()}">

Попробуйте, может быть, так: loggedInUserInfo возвращает строку, а creatorId предположительно является длинным, поэтому уравнение без преобразования не будет истинным.

Вы должны поместить подобную логику в taglib.

1 голос
/ 23 ноября 2011

Тег <sec:loggedInUserInfo field="id"/> не является ожидаемым экземпляром Long, это экземпляр class org.codehaus.groovy.grails.web.util.StreamCharBuffer.Получите текущего пользователя в вашем контроллере следующим образом:

class YourController{    
    def springSecurityService //Inject the Spring Security Service dependency
    //...
    def yourAction ={
        //...
        def currentUser = springSecurityService.getCurrentUser()
        //...
        [currentUser:currentUser] //Make sure to map everything else that needs to be mapped too.
    }
}

Затем проверьте текущего пользователя в своем представлении следующим образом:

<g:if test="${note.creator == currentUser}">
   Never jumps here <!--Now it will get in here just fine.-->
</g:if>
...