Authentication Grails Spring安全核心创建新用户

Authentication Grails Spring安全核心创建新用户,authentication,grails,spring-security,grails-plugin,Authentication,Grails,Spring Security,Grails Plugin,为grails 2.1.0安装了最新的spring安全核心插件,启动了s2 quickstart com.myapp用户角色,它创建用户角色和用户角色域,然后生成所有com.myapp.User和com.myapp.Role以构建基本CRUD。现在我尝试创建一个“注册”按钮,允许新用户登录,使用User create()方法,问题是当创建一个新用户时,这个用户没有角色,我尝试自动将“角色\用户”分配给通过“注册”按钮和表单注册的每个新用户 欢迎提供任何帮助或建议。检查用户创建是否成功后,在控制器

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


欢迎提供任何帮助或建议。

检查用户创建是否成功后,在控制器操作中添加以下内容:

def roleUser = Role.findByName('ROLE_USER')
UserRole.create user, roleUser, true
def userr = user.save flush:true

UserRole.create userr, roleUser.findByAuthority('ROLE_USER'), true

我在我的一个应用程序中做过类似的事情。我用过

生成所有mypackage.User

User是扩展SecUser(由springsecuritycore创建的域对象)的类。 我将此代码添加到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)
}
在引导类中,我扮演了一些角色:

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模板中,我添加了这个select to select角色,并将其发送到params中


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

def roleUser = Role.findByName('ROLE_USER')
UserRole.create user, roleUser, true
def userr = user.save flush:true

UserRole.create userr, roleUser.findByAuthority('ROLE_USER'), true

目前,我正在通过view.gps从用户控制器默认创建方法提供注册,使用So how和where捕获用户创建以及在何处创建新的用户角色?听起来像是在使用动态支架-切换到静态(使用
生成控制器
生成所有
脚本)编辑
create
controller操作。注意,我必须使用
Role.findbyaauthority('Role\u USER')
而不是
Role.findByName('Role\u USER')