| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * https://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package test |
| |
| import grails.gorm.DetachedCriteria |
| import groovy.transform.ToString |
| import org.codehaus.groovy.util.HashCodeHelper |
| |
| @ToString(cache=true, includeNames=true, includePackage=false) |
| class UserRole implements Serializable { |
| |
| private static final long serialVersionUID = 1 |
| |
| User user |
| Role role |
| |
| UserRole(User u, Role r) { |
| this() |
| user = u |
| role = r |
| } |
| |
| @Override |
| boolean equals(other) { |
| if (!(other instanceof UserRole)) { |
| return false |
| } |
| |
| other.user?.id == user?.id && other.role?.id == role?.id |
| } |
| |
| @Override |
| int hashCode() { |
| int hashCode = HashCodeHelper.initHash() |
| if (user) hashCode = HashCodeHelper.updateHash(hashCode, user.id) |
| if (role) hashCode = HashCodeHelper.updateHash(hashCode, role.id) |
| return hashCode |
| } |
| |
| static UserRole get(long userId, long roleId) { |
| criteriaFor(userId, roleId).get() |
| } |
| |
| static boolean exists(long userId, long roleId) { |
| criteriaFor(userId, roleId).count() |
| } |
| |
| private static DetachedCriteria criteriaFor(long userId, long roleId) { |
| UserRole.where { |
| user == User.load(userId) && |
| role == Role.load(roleId) |
| } |
| } |
| |
| static UserRole create(User user, Role role, boolean flush = false) { |
| def instance = new UserRole(user: user, role: role) |
| instance.save(flush: flush, insert: true) |
| instance |
| } |
| |
| static boolean remove(User u, Role r, boolean flush = false) { |
| if (u == null || r == null) return false |
| |
| int rowCount = UserRole.where { user == u && role == r }.deleteAll() |
| |
| if (flush) { UserRole.withSession { it.flush() } } |
| |
| rowCount |
| } |
| |
| static void removeAll(User u, boolean flush = false) { |
| if (u == null) return |
| |
| UserRole.where { user == u }.deleteAll() |
| |
| if (flush) { UserRole.withSession { it.flush() } } |
| } |
| |
| static void removeAll(Role r, boolean flush = false) { |
| if (r == null) return |
| |
| UserRole.where { role == r }.deleteAll() |
| |
| if (flush) { UserRole.withSession { it.flush() } } |
| } |
| |
| static constraints = { |
| role validator: { Role r, UserRole ur -> |
| if (ur.user == null || ur.user.id == null) return |
| boolean existing = false |
| UserRole.withSession { |
| existing = UserRole.exists(ur.user.id, r.id) |
| } |
| if (existing) { |
| return 'userRole.exists' |
| } |
| } |
| } |
| |
| static mapping = { |
| id composite: ['user', 'role'] |
| version false |
| } |
| } |