4

为 grails 2.1.0 安装最新的 spring-security-core 插件,启动 s2-quickstart com.myapp 用户角色,它创建用户角色和用户角色域,然后生成所有 com.myapp.User 和 com.myapp.Role 来构建基本的 CRUD。现在我正在尝试使用 User create() 方法创建一个“注册”按钮以允许新用户登录,问题是在创建新用户时,这个没有角色,我正在尝试自动- 将“ROLE_USER”分配给通过“注册”按钮和表单注册的每个新用户。

非常欢迎任何帮助或建议。

4

3 回答 3

5

检查用户创建成功后,在控制器操作中添加:

def roleUser = Role.findByName('ROLE_USER')
UserRole.create user, roleUser, true
于 2012-07-27T14:40:31.290 回答
5

我一直在我的一个应用程序中做这样的事情。我用过

生成所有 mypackage.User

User 是扩展 SecUser 的类(由 Spring Security Core 创建的域对象)。我将此代码添加到 UserController:

def springSecurityService // injection of Spring Security

def create() {
    def user = springSecurityService.getPrincipal() 
    [userInstance: new User(params)]
}

def save() {
    def map=params
    def userInstance = new User(params)
    if (!userInstance.save(flush: true)) {
        render(view: "create", model: [userInstance: userInstance])
        return
    }

    if (!userInstance.authorities.contains(SecRole.findByAuthority(params.role))) {
        SecUserSecRole.create userInstance, SecRole.findByAuthority(params.role)
    }

    flash.message = message(code: 'default.created.message', args: [message(code: 'user.label', default: 'User'), userInstance.id])
    redirect(action: "show", id: userInstance.id)
}

在 BootStrap 类中,我做了一些角色:

def springSecurityService

def init = { servletContext ->

    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)
    def moderatorRole = SecRole.findByAuthority('ROLE_MODERATOR') ?: new SecRole(authority: 'ROLE_MODERATOR').save(failOnError: true)
}

在 user/_form.gsp 模板中,我添加了这个选择来选择角色并将其发送到params

<sec:ifAllGranted roles="ROLE_ADMIN">
<g:select name="role" from="${['ROLE_USER', 'ROLE_MODERATOR', 'ROLE_ADMIN']}" value='ROLE_MODERATOR'/>
</sec:ifAllGranted>

<sec:ifNotLoggedIn>
<div class="hidden"><g:textField name="role" value="ROLE_USER"/></div>
</sec:ifNotLoggedIn>
于 2013-01-30T09:14:25.097 回答
0

您可以使用此代码:
在检查用户创建成功后将其添加到控制器操作中:

def userr = user.save flush:true

UserRole.create userr, roleUser.findByAuthority('ROLE_USER'), true
于 2015-12-20T13:53:51.083 回答