Sha256: ea2dbe83601108a445eabf65442f8a88adfc46a78852cbb2e6c449f201030362

Contents?: true

Size: 1.13 KB

Versions: 37

Compression:

Stored size: 1.13 KB

Contents

module Ddr
  module Auth
    class RoleBasedAbilityDefinitions < AbilityDefinitions

      def call
        Permissions::ALL.each do |permission|
          can permission, [Ddr::Models::Base, SolrDocument, String] do |obj|
            has_permission? permission, obj
          end
        end
      end

      private

      def has_permission?(permission, obj)
        permissions(obj).include? permission
      end

      def permissions(obj)
        case obj
        when Ddr::Models::Base, SolrDocument
          cached_permissions obj.id do
            obj.effective_permissions(agents)
          end
        when String
          cached_permissions obj do
            permissions_doc(obj).effective_permissions(agents)
          end
        end
      end

      def cached_permissions(pid, &block)
        cache[pid] ||= block.call
      end

      def permissions_doc(pid)
        roles_query_result = ActiveFedora::SolrService.query("id:\"#{pid}\"", rows: 1).first
        if roles_query_result.nil?
          raise "Solr document not found for PID \"#{pid}\"."
        end
        SolrDocument.new roles_query_result
      end

    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
ddr-models-3.0.8 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.7 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.6 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.5 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.4 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.3 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.2 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.1 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.rc6 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.rc5 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.rc4 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.rc3 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.rc2 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.rc1 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.beta.22 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.beta.21 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.beta.20 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.beta.18 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-models-3.0.0.beta.17 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb