diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2019-03-14 02:13:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-14 02:13:42 +0100 |
commit | 9e33174604952490136a6f8cce2c9bd3ca03a26c (patch) | |
tree | 251eb7e328924f4bedcbca7d60e834647500eb18 /app/models/concerns/user_roles.rb | |
parent | dfb9efae81d029d26a9ef09acd891254529a0f53 (diff) |
Refactor User model, extract PamAuthenticable, LdapAuthenticable (#10217)
Diffstat (limited to 'app/models/concerns/user_roles.rb')
-rw-r--r-- | app/models/concerns/user_roles.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/app/models/concerns/user_roles.rb b/app/models/concerns/user_roles.rb new file mode 100644 index 000000000..58dffdc46 --- /dev/null +++ b/app/models/concerns/user_roles.rb @@ -0,0 +1,54 @@ +# 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 |