Grails Spring-Security:在控制器下授予权限

时间:2012-08-05 09:29:04

标签: grails controller spring-security authorization

我是grails的新手。我通常在bootstrap.groovy中向用户授予权限,如下所示:

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()下完成,或者可能不是。

请帮忙。谢谢。

2 个答案:

答案 0 :(得分:0)


你好。 如果您想自己创建一些东西,则需要为用户和角色创建控制器。但是它有一个插件:Spring Security UI,它已经拥有你需要管理的全部内容。

答案 1 :(得分: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
        }
    }
}

在gsp上我做了一个选择框,允许管理员为用户分配一个特定的角色

<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>

  

更改代码以满足您的需求。