Sha256: 3699c293ad45a2fa71062aa872a8735e2059987573249058d1e519fe0bc30aa1

Contents?: true

Size: 997 Bytes

Versions: 3

Compression:

Stored size: 997 Bytes

Contents

module Ddr
  module Auth
    class RoleBasedAbilityDefinitions < AbilityDefinitions

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

      private

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

      def permissions(object_or_id)
        case object_or_id
        when Ddr::Resource, ::SolrDocument
          cached_permissions(object_or_id.id) do
            object_or_id.effective_permissions(agents)
          end
        when String
          cached_permissions(object_or_id) do
            doc = ::SolrDocument.find(object_or_id) # raises SolrDocument::NotFound
            doc.effective_permissions(agents)
          end
        end
      end

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

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ddr-core-0.3.0 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-core-0.2.2 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb
ddr-core-0.2.1 lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb