130 lines
2.9 KiB
Ruby
130 lines
2.9 KiB
Ruby
class Admin < ApplicationRecord
|
|
|
|
#attr_accessible :login, :email, :firstname, :name, :password, :password_confirmation, :avatar, :moderator, :as => :admin
|
|
|
|
|
|
has_many :admin_taskables, :foreign_key => :admin_owner_id
|
|
accepts_nested_attributes_for :admin_taskables
|
|
|
|
has_secure_password
|
|
|
|
attr_accessor :login
|
|
|
|
validates :password, :presence => true,
|
|
:confirmation => true,
|
|
:length => {:within => 6..40},
|
|
:on => :create
|
|
|
|
validates :password, :confirmation => true,
|
|
:length => {:within => 6..40},
|
|
:allow_blank => true,
|
|
:on => :update
|
|
validates :password_confirmation, :presence => true,
|
|
:unless => Proc.new { |a| a.password.blank? }
|
|
|
|
|
|
validates :email, :presence => true, :uniqueness => true
|
|
validates :username, :presence => true, :uniqueness => true
|
|
|
|
# mount_uploader :avatar, AvatarUploader
|
|
|
|
before_create { generate_token(:remember_token) }
|
|
|
|
|
|
has_many :admin_preferences
|
|
|
|
|
|
after_save do
|
|
ids_to_add = Admin.all.ids
|
|
|
|
ids_to_add = ids_to_add - self.admin_taskables.map{|a| a.admin_id}
|
|
if self.id
|
|
ids_to_add = ids_to_add - [self.id]
|
|
end
|
|
puts "A"
|
|
puts ids_to_add
|
|
#sfdfsd = fdssfd
|
|
|
|
ids_to_add.each do |id_to_add|
|
|
self.admin_taskables.create(:admin_id => id_to_add)
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
def admins_crud_taskable
|
|
if self.super_admin or self.has_permission?("to-do-crud")
|
|
Admin.all
|
|
else
|
|
Admin.where(:id => ([self.id]+self.admin_taskables.where(:crud => true).map{|a| a.admin_id}))
|
|
end
|
|
end
|
|
|
|
def admins_read_taskable
|
|
if self.super_admin or self.has_permission?("to-do-read")
|
|
Admin.all
|
|
|
|
else
|
|
Admin.where(:id => ([self.id]+self.admin_taskables.where(:read => true).map{|a| a.admin_id}))
|
|
end
|
|
end
|
|
|
|
|
|
def show_name
|
|
self.firstname.to_s + " " + self.name.to_s
|
|
end
|
|
|
|
|
|
def send_password_reset
|
|
generate_token(:reset_password_token)
|
|
self.reset_password_sent_at = Time.now
|
|
save!
|
|
AdminMailer.password_reset(self).deliver
|
|
end
|
|
|
|
def generate_token(column)
|
|
begin
|
|
self[column] = SecureRandom.urlsafe_base64
|
|
end while Admin.exists?(column => self[column])
|
|
end
|
|
|
|
def self.find_by_login(login)
|
|
|
|
Admin.where("username = ? OR email = ?", login,login).first
|
|
|
|
end
|
|
has_many :admin_admin_roles
|
|
has_many :admin_roles, :through => :admin_admin_roles
|
|
has_many :admin_permissions, :through => :admin_roles
|
|
|
|
|
|
def has_permission?(permission_slug)
|
|
if self.super_admin
|
|
true
|
|
else
|
|
permission = AdminPermission.where(:slug => permission_slug).first
|
|
|
|
if permission
|
|
if self.admin_permissions.include?(permission)
|
|
true
|
|
else
|
|
false
|
|
end
|
|
else
|
|
false
|
|
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
after_create do
|
|
Admin.all.each do |a|
|
|
a.save
|
|
end
|
|
end
|
|
|
|
end
|