Module: Ddr::Models::SearchBuilder
- Defined in:
- lib/ddr/models/search/search_builder.rb
Overview
Instance Method Summary collapse
- #apply_gated_discovery(solr_parameters) ⇒ Object
- #current_ability ⇒ Object
- #gated_discovery_filters ⇒ Object
- #policy_role_filters ⇒ Object
-
#policy_role_policies ⇒ Object
List of IDs for policies on which any of the current user’s agent has a role in policy scope.
- #resource_role_filters ⇒ Object
Instance Method Details
#apply_gated_discovery(solr_parameters) ⇒ Object
Note:
Copied from Hydra::AccessControlsEnforcement
14 15 16 17 |
# File 'lib/ddr/models/search/search_builder.rb', line 14 def apply_gated_discovery(solr_parameters) solr_parameters[:fq] ||= [] solr_parameters[:fq] << gated_discovery_filters.join(" OR ") end |
#current_ability ⇒ Object
19 20 21 22 |
# File 'lib/ddr/models/search/search_builder.rb', line 19 def current_ability # :scope is assumed here to be a controller which responds to :current_ability scope.current_ability end |
#gated_discovery_filters ⇒ Object
24 25 26 |
# File 'lib/ddr/models/search/search_builder.rb', line 24 def gated_discovery_filters [resource_role_filters, policy_role_filters].compact end |
#policy_role_filters ⇒ Object
40 41 42 43 44 45 |
# File 'lib/ddr/models/search/search_builder.rb', line 40 def policy_role_filters if policy_role_policies.present? rels = policy_role_policies.map { |pid| [:isGovernedBy, pid] } ActiveFedora::SolrQueryBuilder.construct_query_for_rel(rels, " OR ") end end |
#policy_role_policies ⇒ Object
List of IDs for policies on which any of the current user’s agent has a role in policy scope
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/ddr/models/search/search_builder.rb', line 29 def policy_role_policies @policy_role_policies ||= Array.new.tap do |uris| filters = current_ability.agents.map do |agent| "#{Ddr::Index::Fields::POLICY_ROLE}:\"#{agent}\"" end.join(" OR ") query = "#{Ddr::Index::Fields::ACTIVE_FEDORA_MODEL}:Collection AND (#{filters})" results = ActiveFedora::SolrService.query(query, rows: Collection.count, fl: Ddr::Index::Fields::ID) results.each_with_object(uris) { |r, memo| memo << r[Ddr::Index::Fields::ID] } end end |
#resource_role_filters ⇒ Object
47 48 49 50 51 |
# File 'lib/ddr/models/search/search_builder.rb', line 47 def resource_role_filters current_ability.agents.map do |agent| ActiveFedora::SolrQueryBuilder.raw_query(Ddr::Index::Fields::RESOURCE_ROLE, agent) end.join(" OR ") end |