app/models/cms/fortress/user.rb in cms-fortress-1.3.6 vs app/models/cms/fortress/user.rb in cms-fortress-1.3.7
- old
+ new
@@ -3,12 +3,20 @@
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, :validatable, :timeoutable
+ :recoverable, :rememberable, :trackable, :timeoutable,
+ :authentication_keys => [:email, :site_id]
belongs_to :role
belongs_to :site, class_name: "Comfy::Cms::Site", foreign_key: :site_id
scope :all_super, -> { where(type_id: 1) }
@@ -18,13 +26,28 @@
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