Sha256: 995feef01ceeafa46c7b08825183ee79d50c83ad434aa4676f1f7162129b3277

Contents?: true

Size: 1.53 KB

Versions: 36

Compression:

Stored size: 1.53 KB

Contents

require 'active_support/concern'

# TODO 05-05-2015 make Roleable work with other resource_class too

module Roleable
  extend ActiveSupport::Concern

  included do
    # has_many :somthing
    enum role: [:no_access, :guest, :external_business_partner, :user, :super_user, :account_admin, :admin]
    attr_accessor :max_role
    after_initialize :set_default_role, :if => :new_record?

    validates_with RoleValidator

  end

  module ClassMethods
    def policed_roles user
      User.roles.keys.map {|role| [role.titleize,role] if User.roles[role] <= User.roles[user.role]   }.compact
    end
  end

  # role management
  # ---------------
  # enum listing possible roles
  # max_role setting the model max role to that of the current user - you never can promote anyone above your own level
  # set_default_role sets the role of a new user
  #

  class RoleValidator < ActiveModel::Validator
    attr_accessor :user
    def validate(record)
      @user = record
      Rails.logger.info ("roles: old %s new %s" % [ User.roles[record.previous_version.role], User.roles[record.role] ] ) rescue "no previous role"
      if max_role_exhausted and old_role_less_than_new
        record.errors[:role] << I18n.t('.assigned_role_not_allowed')
      end
    end

    def old_role_less_than_new
      User.roles[user.previous_version.role] < User.roles[user.role]
    rescue
      false
    end

    def max_role_exhausted
      User.roles[user.role] > User.roles[user.max_role]
    rescue
      false
    end
  end



  def set_default_role
   self.role ||= :user
  end


end

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
abstracted-0.4.22 app/models/concerns/roleable.rb
abstracted-0.4.21 app/models/concerns/roleable.rb
abstracted-0.4.20 app/models/concerns/roleable.rb
abstracted-0.4.19 app/models/concerns/roleable.rb
abstracted-0.4.18 app/models/concerns/roleable.rb
abstracted-0.4.17 app/models/concerns/roleable.rb
abstracted-0.4.16 app/models/concerns/roleable.rb
abstracted-0.4.15 app/models/concerns/roleable.rb
abstracted-0.4.14 app/models/concerns/roleable.rb
abstracted-0.4.13 app/models/concerns/roleable.rb
abstracted-0.4.12 app/models/concerns/roleable.rb
abstracted-0.4.10 app/models/concerns/roleable.rb
abstracted-0.4.9 app/models/concerns/roleable.rb
abstracted-0.4.8 app/models/concerns/roleable.rb
abstracted-0.4.7 app/models/concerns/roleable.rb
abstracted-0.4.6 app/models/concerns/roleable.rb
abstracted-0.4.5 app/models/concerns/roleable.rb
abstracted-0.4.4 app/models/concerns/roleable.rb
abstracted-0.4.3 app/models/concerns/roleable.rb
abstracted-0.4.2 app/models/concerns/roleable.rb