Sha256: a2e6a993eec81a785ba17c5857fd6c54b2cf8846e5d0d69a780854b321a07649

Contents?: true

Size: 1.23 KB

Versions: 4

Compression:

Stored size: 1.23 KB

Contents

module ForestLiana
  class PermissionsChecker
    @@permissions = nil
    @@last_retrieve = nil
    @@expiration_in_seconds = (ENV['FOREST_PERMISSIONS_EXPIRATION_IN_SECONDS'] || 3600).to_i

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

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

    private

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

    def retrieve_permissions
      @@permissions = PermissionsGetter.new.perform
      @@last_retrieve = Time.now
    end

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

    def is_permission_expired?
      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

4 entries across 4 versions & 1 rubygems

Version Path
forest_liana-2.8.3 app/services/forest_liana/permissions_checker.rb
forest_liana-2.8.2 app/services/forest_liana/permissions_checker.rb
forest_liana-2.8.1 app/services/forest_liana/permissions_checker.rb
forest_liana-2.8.0 app/services/forest_liana/permissions_checker.rb