Sha256: 461a184bb30014faba9ce7e730c902baa91143357acb39ff43503d4b623997f3

Contents?: true

Size: 1.88 KB

Versions: 30

Compression:

Stored size: 1.88 KB

Contents

module ForestLiana
  class PermissionsChecker
    @@permissions_per_rendering = Hash.new
    @@expiration_in_seconds = (ENV['FOREST_PERMISSIONS_EXPIRATION_IN_SECONDS'] || 3600).to_i

    def initialize(resource, permission_name, rendering_id)
      @collection_name = ForestLiana.name_for(resource)
      @permission_name = permission_name
      @rendering_id = rendering_id
    end

    def is_authorized?
      (is_permission_expired? || !is_allowed?) ? retrieve_permissions_and_check_allowed : true
    end

    private

    def get_permissions
      @@permissions_per_rendering &&
        @@permissions_per_rendering[@rendering_id] &&
        @@permissions_per_rendering[@rendering_id]['data']
    end

    def get_last_retrieve
      @@permissions_per_rendering &&
        @@permissions_per_rendering[@rendering_id] &&
        @@permissions_per_rendering[@rendering_id]['last_retrieve']
    end

    def is_allowed?
      permissions = get_permissions

      if permissions && permissions[@collection_name] &&
        permissions[@collection_name]['collection']
        permissions[@collection_name]['collection'][@permission_name]
      else
        false
      end
    end

    def retrieve_permissions
      @@permissions_per_rendering[@rendering_id] = Hash.new
      @@permissions_per_rendering[@rendering_id]['data'] =
        ForestLiana::PermissionsGetter.new(@rendering_id).perform()
      @@permissions_per_rendering[@rendering_id]['last_retrieve'] = Time.now
    end

    def date_difference_in_seconds(date1, date2)
      (date1 - date2).to_i
    end

    def is_permission_expired?
      last_retrieve = get_last_retrieve

      return true if last_retrieve.nil?

      elapsed_seconds = date_difference_in_seconds(Time.now, last_retrieve)
      elapsed_seconds >= @@expiration_in_seconds
    end

    def retrieve_permissions_and_check_allowed
      retrieve_permissions
      is_allowed?
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
forest_liana-2.13.2 app/services/forest_liana/permissions_checker.rb
forest_liana-2.13.1 app/services/forest_liana/permissions_checker.rb
forest_liana-2.13.0 app/services/forest_liana/permissions_checker.rb
forest_liana-2.12.0 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.13 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.12 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.11 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.10 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.9 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.8 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.7 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.6 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.5 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.4 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.3 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.2 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.1 app/services/forest_liana/permissions_checker.rb
forest_liana-2.11.0 app/services/forest_liana/permissions_checker.rb
forest_liana-2.10.5 app/services/forest_liana/permissions_checker.rb
forest_liana-2.10.4 app/services/forest_liana/permissions_checker.rb