Files
fizzy/app/models/user/role.rb
T
Mike Dalessio edf6b53469 Introduce an "owner" role, and prevent it from being administered
to prevent the owner from being demoted or kicked out.

ref: https://app.fizzy.do/5986089/cards/3213
2025-11-29 14:13:29 -05:00

33 lines
785 B
Ruby

module User::Role
extend ActiveSupport::Concern
included do
enum :role, %i[ owner admin member system ].index_by(&:itself), scopes: false
scope :owner, -> { where(active: true, role: :owner) }
scope :admin, -> { where(active: true, role: %i[ owner admin ]) }
scope :member, -> { where(active: true, role: :member) }
scope :active, -> { where(active: true, role: %i[ owner admin member ]) }
def admin?
super || owner?
end
end
def can_change?(other)
(admin? && !other.owner?) || other == self
end
def can_administer?(other)
admin? && !other.owner? && other != self
end
def can_administer_board?(board)
admin? || board.creator == self
end
def can_administer_card?(card)
admin? || card.creator == self
end
end