2012-08-05 95 views
0

我是grails新手。我通常授予權限BootStrap.groovy中用戶看起來像這樣:Grails Spring-Security:管理員授予的權限

def roleAdmin = Role.findByAuthority('ROLE_ADMIN') ?: new Role(authority: 'ROLE_ADMIN').save(failOnError: true) 

def userMe = User.findByUsername('admin') ?: new User(username: 'jhon', 
       password: ('adminme'),enabled: true).save(failOnError:true) 

UserRole.create userMe, roleAdmin 

正如你所看到的,這是在BootStrap.groovy中完成的。現在我想在一個控制器(即UserController)中這樣做,這樣當我創建一個新用戶時,它也會授予權限。我以爲它應該在UserController的def save()下完成,或者不是。

請幫忙。謝謝。

+1

不知道問題是什麼....在引導程序中運行的代碼也可以在控制器中運行... – 2012-08-05 22:46:46

回答

0


嗨。 如果你想自己創建一些東西,你需要爲用戶和角色創建控制器。但有一個插件:Spring Security UI,它已經擁有了你需要管理的所有東西。

0

我假設您已經安裝了Spring-Security-Core插件。這段代碼應該做你正在問的東西。你將要在控制器中使用這些代碼。我把我的控制器稱爲AdminController,它負責處理我所有的管理任務。

def addUser= { 

    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) 

    /*create new user*/ 
    def user = SecUser.findByUsername("${params.username}") ?: new SecUser (
     username: params.username, 
     password: params.password, 
     enabled: true, 
    ).save() 

    /*Assign a user role*/ 
    if(params.accounttype.equals("User")){ 
     if (!user.authorities.contains(userRole)) { 
      SecUserSecRole.create user, userRole 
     } 
    } 
    /*Assign an admin role*/ 
    if(params.accounttype.equals("Admin")){ 
     if (!user.authorities.contains(adminRole)) { 
      SecUserSecRole.create user, adminRole 
     } 
    } 
} 

關於普惠制我做了一個選擇框,允許管理員將用戶分配一個特定角色

<g:form controller="admin" action="addUser"> 
<table> 
    <tr> 
    <td align ="right"><br>Username: <br></td> 
    <td><br><g:textField name="username" value=""/><br></td> 
    </tr> 
    <tr> 
    <td align="right"><br>Password: <br></td> 
    <td><br><g:textField name="password" value=""/><br></td> 
    </tr> 
    <tr> 
    <td align="right"><br>Choose Role:<br></td> 
    <td><br><g:select name="accounttype" from='${["User","Admin"]}'/><br></td> 
    </tr> 
    <tr> 
    <td></td> 
    <td><br><g:submitButton name="addUser" value="Add User" /></td></td> 
    </tr> 

阿爾特,以滿足您的需要的代碼。