class Ddr::Auth::RoleBasedAbilityDefinitions

Public Instance Methods

call() click to toggle source
# File lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb, line 5
def call
  Permissions::ALL.each do |permission|
    can permission, [Ddr::Models::Base, SolrDocument, String] do |obj|
      has_permission? permission, obj
    end
  end
end

Private Instance Methods

cached_permissions(pid, &block) click to toggle source
# File lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb, line 32
def cached_permissions(pid, &block)
  cache[pid] ||= block.call
end
has_permission?(permission, obj) click to toggle source
# File lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb, line 15
def has_permission?(permission, obj)
  permissions(obj).include? permission
end
permissions(obj) click to toggle source
# File lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb, line 19
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
permissions_doc(pid) click to toggle source
# File lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb, line 36
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