2012-09-24 389 views
0

以下代碼向單個用戶添加多個角色,同時應該注意的是,這隻適用於單個會話,因爲我們每次啓動時都會嘗試定義角色和用戶應用程序,以防止因爲添加數據庫檢查而創建的任何崩潰,並創建角色和用戶如果它們不存在。單個用戶的多個角色

import trippinspring.* 

class BootStrap { 

def init = { servletContext -> 

    def adminRole = new SpringRole(authority: 'ROLE_ADMIN').save(flush: true) 
    def userRole = new SpringRole(authority: 'ROLE_USER').save(flush: true) 

    def testUser = new SpringUser(username: 'me', enabled: true, password: 'password') 
    testUser.save(flush: true) 

if (!testUser.authorities.contains(adminRole)) { 
new SpringUserSpringRole(springUser: testUser, springRole: adminRole).save(flush: true,failOnError: true) 
} 

if (!testUser.authorities.contains(userRole)) { 
new SpringUserSpringRole(springUser: testUser, springRole: userRole).save(flush: true,failOnError: true) 
} 
} 
} 

大部分的代碼是直接引用亞蘭Arabyan的回答,和伊恩·羅伯茨與一些修復評論我的代碼工作。

+0

'def userRole = new SpringUser(...)'是一個錯字 - 它應該是'new SpringRole'? –

+0

對不起,這是一個錯字,但代碼在修復後仍然不能編譯。 – Mantas

回答

1
if (!testUser.authorities.contains(adminRole)) { 
    new SpringUserSpringRole(user: testUser, role: adminRole).save(flush: true,failOnError: true) 
    } 

if (!testUser.authorities.contains(userRole)) { 
    new SpringUserSpringRole(user: testUser, role: userRole).save(flush: true,failOnError: true) 
    } 
+0

執行引導時出錯:對象引用未保存的瞬態實例 - 在刷新前保存瞬態實例 – Mantas

+0

請將save(flush:flush)更改爲保存(flush:true,failOnError:true) –

+0

我似乎仍然得到相同的錯誤,這是我的代碼有問題而不是你的嗎?我會在上面更新我的代碼供您查看。 – Mantas

0

只是一個建議,也許你應該試着爲你的角色創建一個層次,而不是增加對單個用戶兩個角色: see doc

相關問題