class User include Mongoid::Document ROLES = %w[admin content_manager] #attr_accessible :roles # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, # :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :registerable ## Database authenticatable field :email, :type => String, :default => "" field :encrypted_password, :type => String, :default => "" validates_presence_of :email validates_presence_of :encrypted_password ## Recoverable field :reset_password_token, :type => String field :reset_password_sent_at, :type => Time ## Rememberable field :remember_created_at, :type => Time ## Trackable field :sign_in_count, :type => Integer, :default => 0 field :current_sign_in_at, :type => Time field :last_sign_in_at, :type => Time field :current_sign_in_ip, :type => String field :last_sign_in_ip, :type => String ## Confirmable # field :confirmation_token, :type => String # field :confirmed_at, :type => Time # field :confirmation_sent_at, :type => Time # field :unconfirmed_email, :type => String # Only if using reconfirmable ## Lockable # field :failed_attempts, :type => Integer, :default => 0 # Only if lock strategy is :failed_attempts # field :unlock_token, :type => String # Only if unlock strategy is :email or :both # field :locked_at, :type => Time ## Token authenticatable # field :authentication_token, :type => String #field :role, :type => String field :roles_mask, :type => Integer def roles=(roles) self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.inject(0, :+) 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 end