【发布时间】:2015-05-05 15:24:21
【问题描述】:
我正在使用 Spring Security 核心插件实现身份验证。现在我有一个生成 CRUD 视图的类,我想调整它们。
域类的一部分是用户。如果用户只有“用户权限”,他不应该选择用户(默认用户是当前用户)。 如果用户是管理员(权限:ROLE_ADMIN),他应该能够选择所有可用用户。
在我的控制器中,我尝试使用 springSecurityService.getCurrentUser() 在我的 gsp 中设置默认用户。不幸的是,这会导致错误:
控制器:
def currentUser(){
User user = springSecurityService.getCurrentUser()
return user
}
form.gsp:
<div class="fieldcontain ${hasErrors(bean: daybookingInstance, field: 'user', 'error')} required">
<label for="user">
<g:message code="daybooking.user.label" default="User" />
<span class="required-indicator">*</span>
</label>
<g:select id="user" name="user.id" from="${usermanagement.User.list()}" optionKey="id" required="" value="${package.controller.currentUser().id}" class="many-to-one"/>
到底怎么让selection的内容变变量(admin:所有用户,普通用户:不选择)以及如何设置默认用户(当前登录)
编辑:错误信息:
Caused by MissingMethodException: No signature of method: usermanagement.User.currentUser() is applicable for argument types: () values: []
Possible solutions: currentUser()
编辑:
这是我在控制器中的方法:
User userInstance = springSecurityService.getCurrentUser()
integer id = userInstance.id
log.error(id)
render(view: '_form.gsp', model : [id: id])
}
我尝试通过传递整个 userInstance 但我总是得到一个空指针异常,说我无法从 null 获取 id(在视图中:userInstance.id)
这是我认为的sn-p(由grails创建的_form.gsp):
<div class="fieldcontain ${hasErrors(bean: dailyBookingInstance, field: 'user', 'error')} required">
<label for="user">
<g:message code="dailyBooking.user.label" default="User" />
<span class="required-indicator">*</span>
</label>
<g:select id="user" name="user.id" from="${usermanagement.User.list()}" optionKey="id" required="" value="${id}" class="many-to-one"/>
</div>
这些方法工作正常,因为 id/userInstance 已正确记录。不知何故,我觉得我不应该将数据传递给这个生成的东西。
【问题讨论】:
-
你能详细说明一下这段代码:`value="${package.controller.currentUser().id}"`吗?我猜您尝试从 gsp 调用控制器方法,对吗?如果是这样,这不是它的工作方式。控制器渲染视图并将值传递给视图,而不是相反。另一件事是,如果您想从 gsp 读取当前用户,则有一个 spring security taglib 用于此(参见docs)。
-
是的,我想从 gsp 调用控制器方法。但你是对的,这不是它的工作原理。我加了smth。就像在我的控制器中那样:[用户:用户],这应该将用户对象传递给视图吗?现在的问题是当我尝试在视图中访问它时,我总是得到它为空的错误。生成的 CRUD 视图有问题吗?目前我在 _form.gsp 中工作,并在我的控制器中有一个名为 currentUser() 的操作。
-
下一段代码是什么意思:usermanagement.User.list() ??
-
这是从 grails/gorm 生成的,结果是一个包含所有用户的下拉菜单
-
可能
usermanagement只是User Domain类的封装...
标签: grails view controller grails-orm