2012-07-27 115 views
4

爲grails 2.1.0安裝了最新的spring-security-core插件,啓動了s2-quickstart com.myapp用戶角色,它創建用戶角色和UserRole域,然後生成所有的com.myapp .User和com.myapp.Role構建基本的CRUD。現在我試圖創建一個「註冊」按鈕,以允許新用戶登錄,使用用戶create()方法,問題是,當創建一個新的用戶,這一個來沒有角色,我試圖自動通過「註冊」按鈕和表單註冊「ROLE_USER」給每個新用戶。Grails Spring Security Core創建新用戶

任何幫助或建議是最受歡迎的。

回答

5

在控制器動作添加此檢查用戶創建成功後:

def roleUser = Role.findByName('ROLE_USER') 
UserRole.create user, roleUser, true 
+0

目前,我通過缺省提供註冊由view.gps創建從用戶控制器的方法,使用 <克:建立連結控制器=「用戶」 action =「create」> 那麼如何以及在何處捕捉用戶創建以及我應該在哪裏獲得新的UserRole? – smace 2012-07-27 14:55:54

+1

聽起來像你正在使用動態腳手架 - 切換到靜態(使用'generate-controller'或'generate-all'腳本)並編輯'create'控制器動作。 – 2012-07-27 15:26:08

+0

請注意,我不得不使用'Role.findByAuthority('ROLE_USER')'而不是'Role.findByName('ROLE_USER')' – 2015-09-07 12:06:05

4

我一直在做這樣的事情在我的應用程序之一。我用

產生,所有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> 
0

您可以使用此代碼:
控制器行爲添加此離子後檢查用戶創建成功:

def userr = user.save flush:true 

UserRole.create userr, roleUser.findByAuthority('ROLE_USER'), true 
相關問題