我是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()下完成,或者可能不是。
请帮忙。谢谢。
答案 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>
更改代码以满足您的需求。