0

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

请帮忙。谢谢你。

4

2 回答 2

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>

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

于 2012-08-06T13:29:17.117 回答
0


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

于 2012-08-06T08:04:05.297 回答