app/models/cms/fortress/user.rb
class Cms::Fortress::User < ActiveRecord::Base
# set_table_name :cms_fortress_users
self.table_name = "cms_fortress_users"
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
# manually add :validatable validations because uniqueness does not include :site_id
validates_presence_of :email, if: :email_required?
validates_uniqueness_of :email, scope: :site_id, allow_blank: true, if: :email_changed?
validates_format_of :email, with: Devise.email_regexp, allow_blank: true, if: :email_changed?
validates_presence_of :password, if: :password_required?
validates_confirmation_of :password, if: :password_required?
validates_length_of :password, within: Devise.password_length, allow_blank: true
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :timeoutable,
:authentication_keys => -> {Cms::Fortress.configuration.login_site_selector ? [:email, :site_id] : [:email]}.call
belongs_to :role
belongs_to :site, class_name: "Comfy::Cms::Site", foreign_key: :site_id
scope :all_super, -> { where(type_id: 1) }
def self.types
{
1 => :super_user,
2 => :site_user
}
end
def self.find_for_authentication(warden_conditions)
where(:email => warden_conditions[:email], :site_id => warden_conditions[:site_id]).first || where(:email => warden_conditions[:email]).first
end
def type
self.class.types[type_id]
end
def display_name
"#{ email } (#{ type.to_s.titleize })"
end
protected
def password_required?
!persisted? || !password.nil? || !password_confirmation.nil?
end
def email_required?
true
end
end