Files
PMS/app/models/user.rb
2026-01-29 12:00:13 +06:30

47 lines
1.5 KiB
Ruby

class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,
:confirmable, :lockable, :trackable
belongs_to :department, optional: true
has_many :assigned_tasks, class_name: 'Task', foreign_key: 'assignee_id'
has_many :created_tasks, class_name: 'Task', foreign_key: 'creator_id'
has_many :comments, dependent: :destroy
enum role: { admin: 'admin', manager: 'manager', employee: 'employee' }
validates :name, presence: true
validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
validates :role, presence: true
scope :by_role, ->(role) { where(role: role) }
scope :by_department, ->(department) { where(department: department) }
scope :ordered, -> { order(:name) }
def can_manage_department?(department)
return true if admin?
return false unless manager?
self.department == department
end
def can_view_task?(task)
return true if admin?
return true if department == task.department
assigned_tasks.include?(task) || created_tasks.include?(task)
end
def can_assign_task?(task)
return true if admin?
return false unless manager?
can_manage_department?(task.department)
end
def department_users
return User.all if admin?
return department.users if manager?
return [self] if employee?
User.none
end
end