25 lines
513 B
Ruby
25 lines
513 B
Ruby
module User::Role
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
enum :role, %i[ admin member system ].index_by(&:itself), scopes: false
|
|
|
|
scope :member, -> { where(role: :member) }
|
|
scope :active, -> { where(active: true, role: %i[ admin member ]) }
|
|
end
|
|
|
|
class_methods do
|
|
def system
|
|
find_or_create_by!(role: :system) { it.name = "System" }
|
|
end
|
|
end
|
|
|
|
def can_change?(other)
|
|
admin? || other == self
|
|
end
|
|
|
|
def can_administer?(other = nil)
|
|
admin? && other != self
|
|
end
|
|
end
|