class User{
static hasMany=[roles:Role]
String name
}
class Role{
static belongsTo = User
static hasMany=[users:User]
String name
}
使用方法:
Role roleUser=new Role(name: "ROLE_USER").save()
Role roleAdmin==new Role(name: "ROLE_ADMIN").save()
User user1= new User(name: "bruce_lin_chn")
user1.addToRoles(roleUser)
user1.save()
存在的問題:
[list]
[*]hasMany會在User和Role中創建Set(org.hibernate.collection.PersistentSet)
[*]爲了唯一性檢查,增加一個Role到User要求加載所有用戶角色的實例和所有其他擁有該權限的用戶
[*]存在樂觀鎖異常的風險
解決方案:
class User{
String name
}
class Role{
String name
}
class UserRole implements Serializable{
User user
Role role
static mapping = {
table 'user_role_mapping'
version false
id composite: ['user', 'role']
}
static Set<Role> getRoles(User user){
UserRole.findAllByUser(user).collect{it.role} as Set
}
static boolean hasRole(User user, Role role){
return UserRole.countByUserAndRole(user,role)>0
}
static beforeDeleteUser(User user){
}
static beforeDeleteRole(Role role){
}
}
[list]
[*]
[/list]