GSP if测试返回false,同时检查一个登录用户是否是一个域类实例的创建者



我正在使用Spring安全核心插件。

我想测试登录的用户是否是Note的创建者。注意是Grails域类。请注意。创建者是User,这是Spring Security Core插件的User域类。

下一段代码不工作

<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}

你知道我错过了什么吗?提前感谢!

<g:if test="${note.creator.id.toString() == loggedUserId.toString()}">

尝试这样也许,loggedInUserInfo返回一个字符串和creatatorid应该是一个长,所以等式没有强制转换将不成立。

你应该把这样的逻辑放到标签库中。

标签<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>

相关内容

  • 没有找到相关文章

最新更新