2015-01-28 3 views
-1

У меня возникли трудности с поиском способа правильного распространения весеннего плагина ui. То, что я хочу сделать, это, видимо, просто: У меня есть 3 класс домена, созданный с помощью сценария:Расширение плагина пользовательского интерфейса Spring Security в приложении Grails

  • пользователя
  • Роль
  • UserRole

Я хотел расширить класс домена пользователя, в чтобы добавить имя, фамилию, страну, дату рождения, пол и функцию видимости, и я придумал эту идею:

Я создал еще 2 класс домена, RegisterUser и UserInfo.

Код следующим образом:

class User { 

    transient springSecurityService 

    String username 
    String password 
    long phone 
    String email 
    boolean enabled = true 
    boolean accountExpired 
    boolean accountLocked 
    boolean passwordExpired 

    static hasMany = [openIds: OpenID] 

    static transients = ['springSecurityService'] 

    static constraints = { 
     username blank: false, unique: true 
     password blank: false 
     phone unique:true , nullable:false, blank: false, length:10, range: 3200000000..3940000000 
     email email:true, nullable:false, blank:false 
    } 

    static mapping = { 
     phone column :'idUser' 
     email column : 'email' 
     username column : 'username' 
     password column: '`password`' 
    } 

    Set<Role> getAuthorities() { 
     UserRole.findAllByUser(this).collect { it.role } 
    } 

    def beforeInsert() { 
     encodePassword() 
    } 

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

    protected void encodePassword() { 
     password = springSecurityService?.passwordEncoder ? springSecurityService.encodePassword(password) : password 
    } 
} 

class UserInfo implements Comparable { 

    String firstname 
    String lastname 
    String country 
    Date date_of_birth 
    String gender 

    static belongsTo = RegisteredUser 

    static mapping = { 
     firstname column : 'firstname' 
     lastname column : 'surname' 
     date_of_birth column : 'date_of_birth' 
     country column : 'country' 
     gender column : 'gender' 
    } 

    static constraints = { 
     firstname blank:false, matches:"[a-zA-Z]+" 
     lastname blank:false, matches:"[a-zA-Z]+" 
     country blank:true, nullable:true 
     date_of_birth nullable:true, unique:false 
     gender blank:true, nullable:true, inList:["Male", "Female"] 
    } 

    @Override 
    public int compareTo(Object o) { 
     // Compare two user basing on their phone numbers and username 
     RegisteredUser u = (RegisteredUser) o 
     if(u.info.phone == this.phone){ 
     if(u.info.email == this.email){ 
      return 0; 
     } 
     return -1; 
     } 
     return 1; 
    } 
} 

class RegisteredUser { 

    User user 
    UserInfo info 
    boolean visible 

    //Not related to spring security 
    static hasOne = UserInfo 
    static hasMany = [friendships : Friendship, blocked: Block, trips : Trip] 

    static constraints = { 

    } 

    /** 
    * Programmatic exercise...? Do it in a more elegant (groovy) and less java way 
    * @return 
    */ 
    static List<RegisteredUser> getContactList_Java(){ 
     def friendshipList = 
     Friendship.getFriendships(this) 
     def contactList = new ArrayList<RegisteredUser>() 
     for(Friendship f : friendshipList){ 
     if(f.user1.equals(this)){ 
      friendshipList.add(f.user2) 
     }else{ 
      friendshipList.add(f.user1) 
     } 
     } 
    } 
    /** 
    * Programmatic exercise?... Done! ;D 
    * @return 
    */ 
    static List<RegisteredUser> getContactList(){ 
     Friendship.getFriendships(){((Friendship)it).otherUser(this)}.collect() 
    } 

    /** 
    * 
    * method user_exists 
    * Parameters: 
    * @param user 
    * @return 
    * method type: 
    * Dynamically chosen 
    */ 
    static user_exists(User u){ 
     if(User.where{ 
     username == u.username}.count() > 0){ 
     true 
     } 
     false 
    } 

    /** 
    * 
    * method findByPhone 
    * Parameters: 
    * @param number 
    * @return 
    * method type: 
    * Dynamically chosen 
    */ 
    def findByPhone(int number){ 
     User.findByPhone(number) 
    } 

    /** 
    * 
    * method findBySomeInfo 
    * Parameters: 
    * @param infos 
    * @return 
    * method type: 
    * Dynamically chosen 
    */ 
    def findByMail(String mail){ 
     User.findByEmail(mail) 
    } 

    /** 
    * 
    * method findByName 
    * Parameters: 
    * @param firstname 
    * @return 
    * method type: 
    * Dynamically chosen 
    */ 
    def findByName(String firstname){ 
     UserInfo.findByFirstname(firstname) 
    } 

    /** 
    * 
    * method findSentRequests 
    * Parameters: 
    * @return 
    * method type: 
    * Dynamically chosen 
    */ 
    def findSentRequests(){ 
     Request.findBySender(this) 
    } 

    /** 
    * 
    * method findReceivedRequest 
    * Parameters: 
    * @return 
    * method type: 
    * Dynamically chosen 
    */ 
    def findReceivedRequest(){ 
     Request.findByReceiver(this) 
    } 

    /** 
    * 
    * Method findSentActiveRequest 
    * Parameters: 
    * @return 
    * Method type: 
    * Dynamically defined (Default) 
    */ 
    def findSentActiveRequest(){ 
     Request.findBySenderAndStatus(this, util.Status.ACTIVE) 
    } 
} 

Если я создаю экземпляр зарегистрированного пользователя через самозагрузки приложение не видит пользователей на всех.

Я не вижу ошибки, которую я, очевидно, сделал.

ответ

0

Предлагаю вам удалить класс RegisteredUser. Я считаю, что хорошим решением может быть класс пользователя и класс профиля в отношениях один к одному:

class User{ 

transient springSecurityService 

    String username 
    String password 
    long phone 
    String email 
    boolean enabled = true 
    boolean accountExpired 
    boolean accountLocked 
    boolean passwordExpired 

    ... 

    static hasOne = [profile: UserProfile] 

    ... 
} 


class UserProfile { 

    User user 
    String firstname 
    String lastname 
    String country 
    Date date_of_birth 
    String gender 

    ... 

} 
Смежные вопросы