我正在使用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>