lib/hydra/batch_edit/search_service.rb in hydra-batch-edit-0.2.0 vs lib/hydra/batch_edit/search_service.rb in hydra-batch-edit-0.3.0
- old
+ new
@@ -2,49 +2,57 @@
module BatchEdit
class SearchService
include Blacklight::Configurable
include Blacklight::SolrHelper
-
def initialize(session, user_key)
@session = session
@user_key = user_key
self.class.copy_blacklight_config_from(::CatalogController)
end
solr_search_params_logic << :apply_gated_search
- def last_search_documents
+ def last_search_documents
return [] if @session[:history].blank?
last_search_id = @session[:history].first
- search = Search.find(last_search_id)
- result, document_list = get_search_results(search.query_params, :fl=>'id', :rows=>1000)
+ search = Search.find(last_search_id)
+ _, document_list = get_search_results(search.query_params, :fl=>'id', :rows=>1000)
document_list
end
# filter that sets up access-controlled lucene query in order to provide gated search behavior
# @param solr_parameters the current solr parameters
- # @param user_parameters the current user-subitted parameters
+ # @param user_parameters the current user-submitted parameters
def apply_gated_search(solr_parameters, user_parameters)
solr_parameters[:fq] ||= []
+
# Grant access to public content
user_access_filters = []
-
- user_access_filters << "edit_access_group_t:public"
-
+ user_access_filters << "#{solr_access_control_suffix(:group)}:public"
+
# Grant access based on user id & role
- unless @user_key.nil?
+ unless @user_key.blank?
# for roles
- ::RoleMapper.roles(@user_key).each_with_index do |role, i|
- user_access_filters << "edit_access_group_t:#{role}"
+ ::RoleMapper.roles(@user_key).each do |role|
+ user_access_filters << "#{solr_access_control_suffix(:group)}:#{escape_slashes(role)}"
end
# for individual person access
- user_access_filters << "edit_access_person_t:#{@user_key}"
+ user_access_filters << "#{solr_access_control_suffix(:individual)}:#{escape_slashes(@user_key)}"
end
- solr_parameters[:fq] << user_access_filters.join(" OR ")
- logger.debug("Solr parameters: #{ solr_parameters.inspect }")
- end
+ solr_parameters[:fq] << user_access_filters.join(' OR ')
+ solr_parameters
+ end
+ def escape_slashes(value)
+ value.gsub('/', '\/')
+ end
+
+ # @param [Symbol] key The permission type to return. Must be `:group` or `:individual`
+ def solr_access_control_suffix(key)
+ raise ArgumentError, "you must provide :group or :individual" unless [:group, :individual].include?(key)
+ Hydra.config[:permissions][:edit][key]
+ end
end
end
end