// AssessmentBuddy - Grails webapp for recording and analyzing assessment data
// Copyright (C) 2015, David H. Hovemeyer <david.hovemeyer@gmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

package org.assessmentbuddy.model

/**
 * A user.
 */
class User {
    String userName
    String passwordHash
    String fullName
    String email
    
    static hasMany = [ roles: Role ]

    static constraints = {
        userName unique: true, size: 2..64
        passwordHash size: 1..64
        fullName size: 1..200
        email size: 3..200
    }
    
    /**
     * Returns whether or not the user is an administrator for all programs.
     */
    boolean isAdmin() {
        return roles.any { it.roleType == Role.RoleType.ADMIN && it.scope == Role.Scope.ALL_PROGRAMS }
    }
    
    /**
     * Returns whether or not the user is an administrator for a specific program.
     */
    boolean hasAdminRightsIn(Program program) {
        return roles.any { it.isAdminFor(program) }
    } 
}
