Nicolas Bally d4484275e8 initial
2011-06-25 12:08:06 +02:00

44 lines
967 B
Ruby

# -*- encoding : utf-8 -*-
class Admin < ActiveRecord::Base
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable
attr_accessor :login
attr_accessible :login, :username, :surname, :firstname, :email, :password, :password_confirmation, :roles_mask, :roles, :super_admin
validates :username, :presence => true, :uniqueness => true
ROLES = %w[SuperAdmin]
def super_admin?
true if self.is? :SuperAdmin
end
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def roles
ROLES.reject do |r|
((roles_mask || 0) & 2**ROLES.index(r)).zero?
end
end
def is?(role)
roles.include?(role.to_s)
end
protected
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
login = conditions.delete(:login)
where(conditions).where(["username = :value OR email = :value", { :value => login }]).first
end
end