用户类和spring security ui插件中的电子邮件字段

时间:2012-11-24 12:03:37

标签: grails spring-security grails-plugin

我遇到了spring security ui插件的问题。我正在尝试向我的SecUser类添加电子邮件字段(存储有关用户的信息)。但是,使用s2ui-override生成的Spring Security Management Console中没有字段“email”。另一方面,由于文档,这是可用的(link):

  

默认情况下,只有标准字段(username,enabled,accountExpired,accountLocked和passwordExpired)可用,但可以使用grails s2ui-override脚本进行自定义 - 请参阅有关配置的部分。

我尝试使用s2ui覆盖脚本但没有效果。
我认为这是一个简单的想法,但几个小时后我自己找不到解决方案。所以,如果有人知道如何做到这一点 - 请告诉我;)

在和我的用户类:

class SecUser {

    transient springSecurityService

    String username
    String password
    String email
    boolean enabled
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired

    static constraints = {
        username blank: false, unique: true
        password blank: false
        email blank: false, email:true
    }

    static mapping = {
        password column: '`password`'
    }

    Set<SecRole> getAuthorities() {
        SecUserSecRole.findAllBySecUser(this).collect { it.secRole } as Set
    }

    def beforeInsert() {
        encodePassword()
    }

    def beforeUpdate() {
        if (isDirty('password')) {
            encodePassword()
        }
    }

    protected void encodePassword() {
        password = springSecurityService.encodePassword(password)
    }

    @Override
    public String toString(){
        return "User - "+username;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以在user/edit视图中观看源代码:

    <table>
    <tbody>

        <s2ui:textFieldRow name='username' labelCode='user.username.label' bean="${user}"
                        labelCodeDefault='Username' value="${user?.username}"/>

        <s2ui:passwordFieldRow name='password' labelCode='user.password.label' bean="${user}"
                            labelCodeDefault='Password' value="${user?.password}"/>

        <s2ui:checkboxRow name='enabled' labelCode='user.enabled.label' bean="${user}"
                       labelCodeDefault='Enabled' value="${user?.enabled}"/>

        <s2ui:checkboxRow name='accountExpired' labelCode='user.accountExpired.label' bean="${user}"
                       labelCodeDefault='Account Expired' value="${user?.accountExpired}"/>

        <s2ui:checkboxRow name='accountLocked' labelCode='user.accountLocked.label' bean="${user}"
                       labelCodeDefault='Account Locked' value="${user?.accountLocked}"/>

        <s2ui:checkboxRow name='passwordExpired' labelCode='user.passwordExpired.label' bean="${user}"
                       labelCodeDefault='Password Expired' value="${user?.passwordExpired}"/>
    </tbody>
    </table>

没有电子邮件字段。你应该将edit.gsp和create.gsp文件从source复制到grails-app / views / user /,并在 username 字段之后编辑它贴上这段代码:

    <s2ui:textFieldRow name='email' labelCode='user.email.label' bean="${user}"
                    labelCodeDefault='email' value="${user?.email}"/>

您必须在grails-app / i18n / path中创建 spring-security-core-local.properties 并编写新属性

user.email.label=Email

当然,您应该在正确的域类中创建属性 email