55 lines
		
	
	
	
		
			852 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
	
		
			852 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| 
								 | 
							
								# frozen_string_literal: true
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module UserRoles
							 | 
						||
| 
								 | 
							
								  extend ActiveSupport::Concern
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  included do
							 | 
						||
| 
								 | 
							
								    scope :admins, -> { where(admin: true) }
							 | 
						||
| 
								 | 
							
								    scope :moderators, -> { where(moderator: true) }
							 | 
						||
| 
								 | 
							
								    scope :staff, -> { admins.or(moderators) }
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def staff?
							 | 
						||
| 
								 | 
							
								    admin? || moderator?
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def role
							 | 
						||
| 
								 | 
							
								    if admin?
							 | 
						||
| 
								 | 
							
								      'admin'
							 | 
						||
| 
								 | 
							
								    elsif moderator?
							 | 
						||
| 
								 | 
							
								      'moderator'
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								      'user'
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def role?(role)
							 | 
						||
| 
								 | 
							
								    case role
							 | 
						||
| 
								 | 
							
								    when 'user'
							 | 
						||
| 
								 | 
							
								      true
							 | 
						||
| 
								 | 
							
								    when 'moderator'
							 | 
						||
| 
								 | 
							
								      staff?
							 | 
						||
| 
								 | 
							
								    when 'admin'
							 | 
						||
| 
								 | 
							
								      admin?
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								      false
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def promote!
							 | 
						||
| 
								 | 
							
								    if moderator?
							 | 
						||
| 
								 | 
							
								      update!(moderator: false, admin: true)
							 | 
						||
| 
								 | 
							
								    elsif !admin?
							 | 
						||
| 
								 | 
							
								      update!(moderator: true)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def demote!
							 | 
						||
| 
								 | 
							
								    if admin?
							 | 
						||
| 
								 | 
							
								      update!(admin: false, moderator: true)
							 | 
						||
| 
								 | 
							
								    elsif moderator?
							 | 
						||
| 
								 | 
							
								      update!(moderator: false)
							 | 
						||
| 
								 | 
							
								    end
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								end
							 |