我一直在做這樣的事情在我的應用程序之一。我用
產生,所有mypackage.User
用戶是類擴展SecUser(Spring Security的核心創建的域對象)。 我這個代碼添加到UserController中:
def springSecurityService // injection of Spring Security
def create() {
def user = springSecurityService.getPrincipal()
[userInstance: new User(params)]
}
def save() {
def map=params
def userInstance = new User(params)
if (!userInstance.save(flush: true)) {
render(view: "create", model: [userInstance: userInstance])
return
}
if (!userInstance.authorities.contains(SecRole.findByAuthority(params.role))) {
SecUserSecRole.create userInstance, SecRole.findByAuthority(params.role)
}
flash.message = message(code: 'default.created.message', args: [message(code: 'user.label', default: 'User'), userInstance.id])
redirect(action: "show", id: userInstance.id)
}
在引導類我做了一些角色:
def springSecurityService
def init = { servletContext ->
def userRole = SecRole.findByAuthority('ROLE_USER') ?: new SecRole(authority: 'ROLE_USER').save(failOnError: true)
def adminRole = SecRole.findByAuthority('ROLE_ADMIN') ?: new SecRole(authority: 'ROLE_ADMIN').save(failOnError: true)
def moderatorRole = SecRole.findByAuthority('ROLE_MODERATOR') ?: new SecRole(authority: 'ROLE_MODERATOR').save(failOnError: true)
}
在用戶/ _form.gsp模板我已經添加了這個選擇,選擇角色和發送它PARAMS
<sec:ifAllGranted roles="ROLE_ADMIN">
<g:select name="role" from="${['ROLE_USER', 'ROLE_MODERATOR', 'ROLE_ADMIN']}" value='ROLE_MODERATOR'/>
</sec:ifAllGranted>
<sec:ifNotLoggedIn>
<div class="hidden"><g:textField name="role" value="ROLE_USER"/></div>
</sec:ifNotLoggedIn>
來源
2013-01-30 09:14:25
kmb
目前,我通過缺省提供註冊由view.gps創建從用戶控制器的方法,使用 <克:建立連結控制器=「用戶」 action =「create」> 那麼如何以及在何處捕捉用戶創建以及我應該在哪裏獲得新的UserRole? – smace 2012-07-27 14:55:54
聽起來像你正在使用動態腳手架 - 切換到靜態(使用'generate-controller'或'generate-all'腳本)並編輯'create'控制器動作。 – 2012-07-27 15:26:08
請注意,我不得不使用'Role.findByAuthority('ROLE_USER')'而不是'Role.findByName('ROLE_USER')' – 2015-09-07 12:06:05