hydra-access-controls 6.0.0.pre1 → 6.0.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/hydra-access-controls.gemspec +1 -1
- data/lib/hydra/access_controls_enforcement.rb +10 -8
- data/lib/hydra/admin_policy.rb +6 -8
- data/lib/hydra/datastream/inheritable_rights_metadata.rb +7 -7
- data/lib/hydra/datastream/rights_metadata.rb +22 -6
- data/lib/hydra/policy_aware_ability.rb +3 -2
- data/lib/hydra/policy_aware_access_controls_enforcement.rb +3 -3
- data/spec/unit/ability_spec.rb +9 -9
- data/spec/unit/access_controls_enforcement_spec.rb +13 -17
- data/spec/unit/admin_policy_spec.rb +12 -15
- data/spec/unit/hydra_rights_metadata_spec.rb +8 -8
- data/spec/unit/inheritable_rights_metadata_spec.rb +10 -10
- data/spec/unit/policy_aware_ability_spec.rb +10 -10
- data/spec/unit/policy_aware_access_controls_enforcement_spec.rb +6 -6
- data/spec/unit/rights_metadata_spec.rb +5 -5
- metadata +5 -5
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.required_ruby_version = '>= 1.9.3'
|
19
19
|
|
20
20
|
gem.add_dependency 'activesupport'
|
21
|
-
gem.add_dependency 'active-fedora'
|
21
|
+
gem.add_dependency 'active-fedora', '6.0.0.pre2'
|
22
22
|
gem.add_dependency 'cancan'
|
23
23
|
gem.add_dependency 'deprecation'
|
24
24
|
gem.add_dependency 'blacklight'
|
@@ -119,9 +119,11 @@ module Hydra::AccessControlsEnforcement
|
|
119
119
|
# @param [Hash] opts (optional, not currently used)
|
120
120
|
def enforce_show_permissions(opts={})
|
121
121
|
load_permissions_from_solr
|
122
|
-
|
123
|
-
|
124
|
-
|
122
|
+
access_key = ActiveFedora::SolrService.solr_name("access", Hydra::Datastream::RightsMetadata.indexer)
|
123
|
+
embargo_key = ActiveFedora::SolrService.solr_name("embargo_release_date", Hydra::Datastream::RightsMetadata.date_indexer)
|
124
|
+
unless @permissions_solr_document[access_key] && (@permissions_solr_document[access_key].first == "public" || @permissions_solr_document[access_key].first == "Public")
|
125
|
+
if @permissions_solr_document[embargo_key]
|
126
|
+
embargo_date = Date.parse(@permissions_solr_document[embargo_key].split(/T/)[0])
|
125
127
|
if embargo_date > Date.parse(Time.now.to_s)
|
126
128
|
unless can?(:edit, params[:id])
|
127
129
|
raise Hydra::AccessDenied.new("This item is under embargo. You do not have sufficient access privileges to read this document.", :edit, params[:id])
|
@@ -216,7 +218,7 @@ module Hydra::AccessControlsEnforcement
|
|
216
218
|
user_access_filters = []
|
217
219
|
|
218
220
|
permission_types.each do |type|
|
219
|
-
user_access_filters << "#{type}
|
221
|
+
user_access_filters << ActiveFedora::SolrService.solr_name("#{type}_access_group", Hydra::Datastream::RightsMetadata.indexer) + ":public"
|
220
222
|
end
|
221
223
|
|
222
224
|
# Grant access based on user id & role
|
@@ -232,7 +234,7 @@ module Hydra::AccessControlsEnforcement
|
|
232
234
|
user_access_filters = []
|
233
235
|
current_ability.user_groups.each_with_index do |role, i|
|
234
236
|
permission_types.each do |type|
|
235
|
-
user_access_filters << escape_filter("#{type}
|
237
|
+
user_access_filters << escape_filter(ActiveFedora::SolrService.solr_name("#{type}_access_group", Hydra::Datastream::RightsMetadata.indexer), role)
|
236
238
|
end
|
237
239
|
end
|
238
240
|
user_access_filters
|
@@ -245,9 +247,9 @@ module Hydra::AccessControlsEnforcement
|
|
245
247
|
def apply_individual_permissions(permission_types)
|
246
248
|
# for individual person access
|
247
249
|
user_access_filters = []
|
248
|
-
if user_key.present?
|
250
|
+
if current_user && current_user.user_key.present?
|
249
251
|
permission_types.each do |type|
|
250
|
-
user_access_filters << escape_filter("#{type}
|
252
|
+
user_access_filters << escape_filter(ActiveFedora::SolrService.solr_name("#{type}_access_person", Hydra::Datastream::RightsMetadata.indexer), current_user.user_key)
|
251
253
|
end
|
252
254
|
end
|
253
255
|
user_access_filters
|
@@ -274,6 +276,6 @@ module Hydra::AccessControlsEnforcement
|
|
274
276
|
# @param user_parameters the current user-subitted parameters
|
275
277
|
def exclude_unwanted_models(solr_parameters, user_parameters)
|
276
278
|
solr_parameters[:fq] ||= []
|
277
|
-
solr_parameters[:fq] << "
|
279
|
+
solr_parameters[:fq] << "-#{ActiveFedora::SolrService.solr_name("has_model", :symbol)}:\"info:fedora/afmodel:FileAsset\""
|
278
280
|
end
|
279
281
|
end
|
data/lib/hydra/admin_policy.rb
CHANGED
@@ -9,7 +9,10 @@ class Hydra::AdminPolicy < ActiveFedora::Base
|
|
9
9
|
# Uses the Hydra Rights Metadata Schema for tracking access permissions & copyright
|
10
10
|
has_metadata :name => "rightsMetadata", :type => Hydra::Datastream::RightsMetadata
|
11
11
|
|
12
|
-
has_metadata :name =>'descMetadata', :type => ActiveFedora::QualifiedDublinCoreDatastream
|
12
|
+
has_metadata :name =>'descMetadata', :type => ActiveFedora::QualifiedDublinCoreDatastream do |m|
|
13
|
+
m.title :type=> :text, :index_as=>[:searchable]
|
14
|
+
|
15
|
+
end
|
13
16
|
|
14
17
|
delegate_to :descMetadata, [:title, :description], :unique=>true
|
15
18
|
delegate :license_title, :to=>'rightsMetadata', :at=>[:license, :title], :unique=>true
|
@@ -31,11 +34,11 @@ class Hydra::AdminPolicy < ActiveFedora::Base
|
|
31
34
|
or_query = []
|
32
35
|
RoleMapper.roles(user).each do |group|
|
33
36
|
permissions.each do |permission|
|
34
|
-
or_query << "#{permission}
|
37
|
+
or_query << ActiveFedora::SolrService.solr_name("#{permission}_access_group", indexer)+":#{group}"
|
35
38
|
end
|
36
39
|
end
|
37
40
|
permissions.each do |permission|
|
38
|
-
or_query << "#{permission}
|
41
|
+
or_query << ActiveFedora::SolrService.solr_name("#{permission}_access_person", indexer)+":#{user.user_key}"
|
39
42
|
end
|
40
43
|
find_with_conditions(or_query.join(" OR "))
|
41
44
|
end
|
@@ -73,9 +76,4 @@ class Hydra::AdminPolicy < ActiveFedora::Base
|
|
73
76
|
|
74
77
|
end
|
75
78
|
|
76
|
-
def to_solr(solr_doc = {})
|
77
|
-
super
|
78
|
-
solr_doc['title_display'] = solr_doc['title_t'].first if solr_doc['title_t']
|
79
|
-
solr_doc
|
80
|
-
end
|
81
79
|
end
|
@@ -7,13 +7,13 @@ module Hydra
|
|
7
7
|
@terminology = Hydra::Datastream::RightsMetadata.terminology
|
8
8
|
|
9
9
|
def to_solr(solr_doc=Hash.new)
|
10
|
-
solr_doc[
|
11
|
-
solr_doc[
|
12
|
-
solr_doc[
|
13
|
-
solr_doc[
|
14
|
-
solr_doc[
|
15
|
-
solr_doc[
|
16
|
-
solr_doc[
|
10
|
+
solr_doc[ActiveFedora::SolrService.solr_name('inheritable_discover_access_group', indexer)] = discover_access.machine.group
|
11
|
+
solr_doc[ActiveFedora::SolrService.solr_name('inheritable_discover_access_person', indexer)] = discover_access.machine.person
|
12
|
+
solr_doc[ActiveFedora::SolrService.solr_name('inheritable_read_access_group', indexer)] = read_access.machine.group
|
13
|
+
solr_doc[ActiveFedora::SolrService.solr_name('inheritable_read_access_person', indexer)] = read_access.machine.person
|
14
|
+
solr_doc[ActiveFedora::SolrService.solr_name('inheritable_edit_access_group', indexer)] = edit_access.machine.group
|
15
|
+
solr_doc[ActiveFedora::SolrService.solr_name('inheritable_edit_access_person', indexer)] = edit_access.machine.person
|
16
|
+
solr_doc[ActiveFedora::SolrService.solr_name('inheritable_embargo_release_date', date_indexer)] = embargo_release_date
|
17
17
|
return solr_doc
|
18
18
|
end
|
19
19
|
end
|
@@ -175,22 +175,38 @@ module Hydra
|
|
175
175
|
def to_solr(solr_doc=Hash.new)
|
176
176
|
super(solr_doc)
|
177
177
|
vals = edit_access.machine.group
|
178
|
-
solr_doc['
|
178
|
+
solr_doc[ActiveFedora::SolrService.solr_name('edit_access_group', indexer)] = vals unless vals.empty?
|
179
179
|
vals = discover_access.machine.group
|
180
|
-
solr_doc['
|
180
|
+
solr_doc[ActiveFedora::SolrService.solr_name('discover_access_group', indexer)] = vals unless vals.empty?
|
181
181
|
vals = read_access.machine.group
|
182
|
-
solr_doc['
|
182
|
+
solr_doc[ActiveFedora::SolrService.solr_name('read_access_group', indexer)] = vals unless vals.empty?
|
183
183
|
vals = edit_access.machine.person
|
184
|
-
solr_doc['
|
184
|
+
solr_doc[ActiveFedora::SolrService.solr_name('edit_access_person', indexer)] = vals unless vals.empty?
|
185
185
|
vals = discover_access.machine.person
|
186
|
-
solr_doc['
|
186
|
+
solr_doc[ActiveFedora::SolrService.solr_name('discover_access_person', indexer)] = vals unless vals.empty?
|
187
187
|
vals = read_access.machine.person
|
188
|
-
solr_doc['
|
188
|
+
solr_doc[ActiveFedora::SolrService.solr_name('read_access_person', indexer)] = vals unless vals.empty?
|
189
189
|
|
190
190
|
::Solrizer::Extractor.insert_solr_field_value(solr_doc, "embargo_release_date_dt", embargo_release_date(:format=>:solr_date)) if embargo_release_date
|
191
191
|
solr_doc
|
192
192
|
end
|
193
193
|
|
194
|
+
def indexer
|
195
|
+
self.class.indexer
|
196
|
+
end
|
197
|
+
|
198
|
+
def self.indexer
|
199
|
+
@indexer ||= Solrizer::Descriptor.new(:text, :stored, :indexed, :multivalued)
|
200
|
+
end
|
201
|
+
|
202
|
+
def date_indexer
|
203
|
+
self.class.date_indexer
|
204
|
+
end
|
205
|
+
|
206
|
+
def self.date_indexer
|
207
|
+
@date_indexer ||= Solrizer::Descriptor.new(:date, :stored, :indexed)
|
208
|
+
end
|
209
|
+
|
194
210
|
# Completely clear the permissions
|
195
211
|
def clear_permissions!
|
196
212
|
remove_all_permissions({:person=>true})
|
@@ -26,9 +26,10 @@ module Hydra::PolicyAwareAbility
|
|
26
26
|
# Returns nil if no policy associated with the object
|
27
27
|
def policy_pid_for(object_pid)
|
28
28
|
return @policy_pid if @policy_pid
|
29
|
-
|
29
|
+
#is_governed_by_ssim
|
30
|
+
solr_result = ActiveFedora::Base.find_with_conditions({:id=>object_pid}, :fl=>ActiveFedora::SolrService.solr_name('is_governed_by', :symbol))
|
30
31
|
begin
|
31
|
-
@policy_pid = value_from_solr_field(solr_result, '
|
32
|
+
@policy_pid = value_from_solr_field(solr_result, ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)).first.gsub("info:fedora/", "")
|
32
33
|
rescue NoMethodError
|
33
34
|
@policy_pid = nil
|
34
35
|
end
|
@@ -16,7 +16,7 @@ module Hydra::PolicyAwareAccessControlsEnforcement
|
|
16
16
|
def policy_clauses
|
17
17
|
policy_pids = policies_with_access
|
18
18
|
return nil if policy_pids.empty?
|
19
|
-
'(' + policy_pids.map {|pid| "
|
19
|
+
'(' + policy_pids.map {|pid| ActiveFedora::SolrService.solr_name("is_governed_by", :symbol) + ":info\\:fedora/#{pid.gsub(/:/, '\\\\:')}"}.join(' OR ') + ')'
|
20
20
|
end
|
21
21
|
|
22
22
|
|
@@ -39,7 +39,7 @@ module Hydra::PolicyAwareAccessControlsEnforcement
|
|
39
39
|
user_access_filters = []
|
40
40
|
current_ability.user_groups.each_with_index do |role, i|
|
41
41
|
discovery_permissions.each do |type|
|
42
|
-
user_access_filters << "inheritable_#{type}
|
42
|
+
user_access_filters << ActiveFedora::SolrService.solr_name("inheritable_#{type}_access_group", Hydra::Datastream::RightsMetadata.indexer ) + ":#{role}"
|
43
43
|
end
|
44
44
|
end
|
45
45
|
user_access_filters
|
@@ -49,7 +49,7 @@ module Hydra::PolicyAwareAccessControlsEnforcement
|
|
49
49
|
# for individual person access
|
50
50
|
user_access_filters = []
|
51
51
|
discovery_permissions.each do |type|
|
52
|
-
user_access_filters << "inheritable_#{type}
|
52
|
+
user_access_filters << ActiveFedora::SolrService.solr_name("inheritable_#{type}_access_person", Hydra::Datastream::RightsMetadata.indexer ) + ":#{current_user.user_key}"
|
53
53
|
end
|
54
54
|
user_access_filters
|
55
55
|
end
|
data/spec/unit/ability_spec.rb
CHANGED
@@ -4,18 +4,18 @@ describe Ability do
|
|
4
4
|
before do
|
5
5
|
Hydra.stub(:config).and_return({
|
6
6
|
:permissions=>{
|
7
|
-
:discover => {:group =>"
|
8
|
-
:read => {:group =>"
|
9
|
-
:edit => {:group =>"
|
7
|
+
:discover => {:group =>"discover_access_group_tsim", :individual=>"discover_access_person_tsim"},
|
8
|
+
:read => {:group =>"read_access_group_tsim", :individual=>"read_access_person_tsim"},
|
9
|
+
:edit => {:group =>"edit_access_group_tsim", :individual=>"edit_access_person_tsim"},
|
10
10
|
:owner => "depositor_t",
|
11
|
-
:embargo_release_date => "
|
11
|
+
:embargo_release_date => "embargo_release_date_dtsi",
|
12
12
|
|
13
13
|
:inheritable => {
|
14
|
-
:discover => {:group =>"
|
15
|
-
:read => {:group =>"
|
16
|
-
:edit => {:group =>"
|
17
|
-
:owner => "
|
18
|
-
:embargo_release_date => "
|
14
|
+
:discover => {:group =>"inheritable_discover_access_group_tsim", :individual=>"inheritable_discover_access_person_tsim"},
|
15
|
+
:read => {:group =>"inheritable_read_access_group_tsim", :individual=>"inheritable_read_access_person_tsim"},
|
16
|
+
:edit => {:group =>"inheritable_edit_access_group_tsim", :individual=>"inheritable_edit_access_person_tsim"},
|
17
|
+
:owner => "inheritable_depositor_tsim",
|
18
|
+
:embargo_release_date => "inheritable_embargo_release_date_dtsi"
|
19
19
|
}
|
20
20
|
}})
|
21
21
|
end
|
@@ -10,10 +10,6 @@ describe Hydra::AccessControlsEnforcement do
|
|
10
10
|
@current_ability ||= Ability.new(current_user)
|
11
11
|
end
|
12
12
|
|
13
|
-
def user_key
|
14
|
-
current_user.user_key
|
15
|
-
end
|
16
|
-
|
17
13
|
def session
|
18
14
|
end
|
19
15
|
end
|
@@ -32,7 +28,7 @@ describe Hydra::AccessControlsEnforcement do
|
|
32
28
|
end
|
33
29
|
it "Then I should be treated as a member of the 'public' group" do
|
34
30
|
["discover","edit","read"].each do |type|
|
35
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
31
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_group_tsim\:public/)
|
36
32
|
end
|
37
33
|
end
|
38
34
|
it "Then I should not be treated as a member of the 'registered' group" do
|
@@ -52,19 +48,19 @@ describe Hydra::AccessControlsEnforcement do
|
|
52
48
|
end
|
53
49
|
it "Then I should be treated as a member of the 'public' and 'registered' groups" do
|
54
50
|
["discover","edit","read"].each do |type|
|
55
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
56
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
51
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_group_tsim\:public/)
|
52
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_group_tsim\:registered/)
|
57
53
|
end
|
58
54
|
end
|
59
55
|
it "Then I should see assets that I have discover, read, or edit access to" do
|
60
56
|
["discover","edit","read"].each do |type|
|
61
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
57
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_person_tsim\:#{@user.user_key}/)
|
62
58
|
end
|
63
59
|
end
|
64
60
|
it "Then I should see assets that my groups have discover, read, or edit access to" do
|
65
61
|
["faculty", "africana-faculty"].each do |group_id|
|
66
62
|
["discover","edit","read"].each do |type|
|
67
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
63
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_group_tsim\:#{group_id}/)
|
68
64
|
end
|
69
65
|
end
|
70
66
|
end
|
@@ -94,7 +90,7 @@ describe Hydra::AccessControlsEnforcement do
|
|
94
90
|
subject.stub(:current_user).and_return(user)
|
95
91
|
subject.should_receive(:can?).with(:edit, nil).and_return(true)
|
96
92
|
subject.stub(:can?).with(:read, nil).and_return(true)
|
97
|
-
subject.instance_variable_set :@permissions_solr_document, SolrDocument.new({"
|
93
|
+
subject.instance_variable_set :@permissions_solr_document, SolrDocument.new({"edit_access_person_tsim"=>["testuser@example.com"], "embargo_release_date_dtsi"=>(Date.parse(Time.now.to_s)+2).to_s})
|
98
94
|
|
99
95
|
subject.params = {}
|
100
96
|
subject.should_receive(:load_permissions_from_solr) #This is what normally sets @permissions_solr_document
|
@@ -107,7 +103,7 @@ describe Hydra::AccessControlsEnforcement do
|
|
107
103
|
subject.should_receive(:can?).with(:edit, nil).and_return(false)
|
108
104
|
subject.stub(:can?).with(:read, nil).and_return(true)
|
109
105
|
subject.params = {}
|
110
|
-
subject.instance_variable_set :@permissions_solr_document, SolrDocument.new({"
|
106
|
+
subject.instance_variable_set :@permissions_solr_document, SolrDocument.new({"edit_access_person_tsim"=>["testuser@example.com"], "embargo_release_date_dtsi"=>(Date.parse(Time.now.to_s)+2).to_s})
|
111
107
|
subject.should_receive(:load_permissions_from_solr) #This is what normally sets @permissions_solr_document
|
112
108
|
lambda {subject.send(:enforce_show_permissions, {})}.should raise_error Hydra::AccessDenied, "This item is under embargo. You do not have sufficient access privileges to read this document."
|
113
109
|
end
|
@@ -123,14 +119,14 @@ describe Hydra::AccessControlsEnforcement do
|
|
123
119
|
it "should set query fields for the user id checking against the discover, access, read fields" do
|
124
120
|
subject.send(:apply_gated_discovery, @solr_parameters, @user_parameters)
|
125
121
|
["discover","edit","read"].each do |type|
|
126
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
122
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_person_tsim\:#{@stub_user.user_key}/)
|
127
123
|
end
|
128
124
|
end
|
129
125
|
it "should set query fields for all roles the user is a member of checking against the discover, access, read fields" do
|
130
126
|
subject.send(:apply_gated_discovery, @solr_parameters, @user_parameters)
|
131
127
|
["discover","edit","read"].each do |type|
|
132
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
133
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
128
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_group_tsim\:archivist/)
|
129
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_group_tsim\:researcher/)
|
134
130
|
end
|
135
131
|
end
|
136
132
|
|
@@ -138,8 +134,8 @@ describe Hydra::AccessControlsEnforcement do
|
|
138
134
|
RoleMapper.stub(:roles).with(@stub_user.user_key).and_return(["abc/123","cde/567"])
|
139
135
|
subject.send(:apply_gated_discovery, @solr_parameters, @user_parameters)
|
140
136
|
["discover","edit","read"].each do |type|
|
141
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
142
|
-
@solr_parameters[:fq].first.should match(/#{type}
|
137
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_group_tsim\:abc\\\/123/)
|
138
|
+
@solr_parameters[:fq].first.should match(/#{type}_access_group_tsim\:cde\\\/567/)
|
143
139
|
end
|
144
140
|
end
|
145
141
|
end
|
@@ -153,7 +149,7 @@ describe Hydra::AccessControlsEnforcement do
|
|
153
149
|
end
|
154
150
|
it "should set solr query parameters to filter out FileAssets" do
|
155
151
|
subject.send(:exclude_unwanted_models, @solr_parameters, @user_parameters)
|
156
|
-
@solr_parameters[:fq].should include("
|
152
|
+
@solr_parameters[:fq].should include("-#{ActiveFedora::SolrService.solr_name("has_model", :symbol)}:\"info:fedora/afmodel:FileAsset\"")
|
157
153
|
end
|
158
154
|
end
|
159
155
|
|
@@ -3,18 +3,18 @@ require 'spec_helper'
|
|
3
3
|
describe Hydra::AdminPolicy do
|
4
4
|
before do
|
5
5
|
Hydra.stub(:config).and_return({:permissions=>{
|
6
|
-
:discover => {:group =>"
|
7
|
-
:read => {:group =>"
|
8
|
-
:edit => {:group =>"
|
9
|
-
:owner => "
|
10
|
-
:embargo_release_date => "
|
6
|
+
:discover => {:group =>"discover_access_group_tsim", :individual=>"discover_access_person_tsim"},
|
7
|
+
:read => {:group =>"read_access_group_tsim", :individual=>"read_access_person_tsim"},
|
8
|
+
:edit => {:group =>"edit_access_group_tsim", :individual=>"edit_access_person_tsim"},
|
9
|
+
:owner => "depositor_tsim",
|
10
|
+
:embargo_release_date => "embargo_release_date_dtsi",
|
11
11
|
|
12
12
|
:inheritable => {
|
13
|
-
:discover => {:group =>"
|
14
|
-
:read => {:group =>"
|
15
|
-
:edit => {:group =>"
|
16
|
-
:owner => "
|
17
|
-
:embargo_release_date => "
|
13
|
+
:discover => {:group =>"inheritable_discover_access_group_tsim", :individual=>"inheritable_discover_access_person_tsim"},
|
14
|
+
:read => {:group =>"inheritable_read_access_group_tsim", :individual=>"inheritable_read_access_person_tsim"},
|
15
|
+
:edit => {:group =>"inheritable_edit_access_group_tsim", :individual=>"inheritable_edit_access_person_tsim"},
|
16
|
+
:owner => "inheritable_depositor_tsim",
|
17
|
+
:embargo_release_date => "inheritable_embargo_release_date_dtsi"
|
18
18
|
}
|
19
19
|
}})
|
20
20
|
end
|
@@ -40,11 +40,8 @@ describe Hydra::AdminPolicy do
|
|
40
40
|
|
41
41
|
describe "to_solr" do
|
42
42
|
subject { Hydra::AdminPolicy.new(:title=>"Foobar").to_solr }
|
43
|
-
it "should have
|
44
|
-
subject[
|
45
|
-
end
|
46
|
-
it "should have title_display" do
|
47
|
-
subject["title_display"].should == 'Foobar'
|
43
|
+
it "should have title_tsim" do
|
44
|
+
subject[ActiveFedora::SolrService.solr_name('title', type: :string)].should == ["Foobar"]
|
48
45
|
end
|
49
46
|
end
|
50
47
|
|
@@ -153,10 +153,10 @@ describe Hydra::Datastream::RightsMetadata do
|
|
153
153
|
@sample.update_values(params)
|
154
154
|
solr_doc = @sample.to_solr
|
155
155
|
|
156
|
-
solr_doc["
|
157
|
-
solr_doc["
|
158
|
-
solr_doc["
|
159
|
-
solr_doc["
|
156
|
+
solr_doc["edit_access_person_tsim"].should == ["Lil Kim"]
|
157
|
+
solr_doc["edit_access_group_tsim"].sort.should == ["group1", "group2"]
|
158
|
+
solr_doc["discover_access_person_tsim"].should == ["Joe Schmoe"]
|
159
|
+
solr_doc["discover_access_group_tsim"].should == ["public"]
|
160
160
|
end
|
161
161
|
it "should solrize fixture content correctly" do
|
162
162
|
lsample = Hydra::Datastream::RightsMetadata.new(nil, nil)
|
@@ -164,10 +164,10 @@ describe Hydra::Datastream::RightsMetadata do
|
|
164
164
|
'group' => {'archivist' => 'edit', 'public' =>'read', 'bob'=>'discover'}})
|
165
165
|
|
166
166
|
solr_doc = lsample.to_solr
|
167
|
-
solr_doc["
|
168
|
-
solr_doc["
|
169
|
-
solr_doc["
|
170
|
-
solr_doc["
|
167
|
+
solr_doc["edit_access_person_tsim"].should == ["researcher1"]
|
168
|
+
solr_doc["edit_access_group_tsim"].should == ["archivist"]
|
169
|
+
solr_doc["read_access_group_tsim"].should == ["public"]
|
170
|
+
solr_doc["discover_access_group_tsim"].should == ["bob"]
|
171
171
|
end
|
172
172
|
end
|
173
173
|
describe "embargo_release_date=" do
|
@@ -4,18 +4,18 @@ require "nokogiri"
|
|
4
4
|
describe Hydra::Datastream::InheritableRightsMetadata do
|
5
5
|
before do
|
6
6
|
Hydra.stub(:config).and_return({:permissions=>{
|
7
|
-
:discover => {:group =>"
|
8
|
-
:read => {:group =>"
|
9
|
-
:edit => {:group =>"
|
10
|
-
:owner => "
|
11
|
-
:embargo_release_date => "
|
7
|
+
:discover => {:group =>"discover_access_group_tsim", :individual=>"discover_access_person_tsim"},
|
8
|
+
:read => {:group =>"read_access_group_tsim", :individual=>"read_access_person_tsim"},
|
9
|
+
:edit => {:group =>"edit_access_group_tsim", :individual=>"edit_access_person_tsim"},
|
10
|
+
:owner => "depositor_tsim",
|
11
|
+
:embargo_release_date => "embargo_release_date_dtsi",
|
12
12
|
|
13
13
|
:inheritable => {
|
14
|
-
:discover => {:group =>"
|
15
|
-
:read => {:group =>"
|
16
|
-
:edit => {:group =>"
|
17
|
-
:owner => "
|
18
|
-
:embargo_release_date => "
|
14
|
+
:discover => {:group =>"inheritable_discover_access_group_tsim", :individual=>"inheritable_discover_access_person_tsim"},
|
15
|
+
:read => {:group =>"inheritable_read_access_group_tsim", :individual=>"inheritable_read_access_person_tsim"},
|
16
|
+
:edit => {:group =>"inheritable_edit_access_group_tsim", :individual=>"inheritable_edit_access_person_tsim"},
|
17
|
+
:owner => "inheritable_depositor_tsim",
|
18
|
+
:embargo_release_date => "inheritable_embargo_release_date_dtsi"
|
19
19
|
}
|
20
20
|
}})
|
21
21
|
end
|
@@ -4,18 +4,18 @@ describe Hydra::PolicyAwareAbility do
|
|
4
4
|
before do
|
5
5
|
Hydra.stub(:config).and_return({
|
6
6
|
:permissions=>{
|
7
|
-
:discover => {:group =>"
|
8
|
-
:read => {:group =>"
|
9
|
-
:edit => {:group =>"
|
10
|
-
:owner => "
|
11
|
-
:embargo_release_date => "
|
7
|
+
:discover => {:group =>"discover_access_group_tsim", :individual=>"discover_access_person_tsim"},
|
8
|
+
:read => {:group =>"read_access_group_tsim", :individual=>"read_access_person_tsim"},
|
9
|
+
:edit => {:group =>"edit_access_group_tsim", :individual=>"edit_access_person_tsim"},
|
10
|
+
:owner => "depositor_tsim",
|
11
|
+
:embargo_release_date => "embargo_release_date_dtsi",
|
12
12
|
|
13
13
|
:inheritable => {
|
14
|
-
:discover => {:group =>"
|
15
|
-
:read => {:group =>"
|
16
|
-
:edit => {:group =>"
|
17
|
-
:owner => "
|
18
|
-
:embargo_release_date => "
|
14
|
+
:discover => {:group =>"inheritable_discover_access_group_tsim", :individual=>"inheritable_discover_access_person_tsim"},
|
15
|
+
:read => {:group =>"inheritable_read_access_group_tsim", :individual=>"inheritable_read_access_person_tsim"},
|
16
|
+
:edit => {:group =>"inheritable_edit_access_group_tsim", :individual=>"inheritable_edit_access_person_tsim"},
|
17
|
+
:owner => "inheritable_depositor_tsim",
|
18
|
+
:embargo_release_date => "inheritable_embargo_release_date_dtsi"
|
19
19
|
}
|
20
20
|
}})
|
21
21
|
end
|
@@ -2,13 +2,13 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Hydra::PolicyAwareAccessControlsEnforcement do
|
4
4
|
before(:all) do
|
5
|
-
class
|
5
|
+
class PolicyMockController
|
6
6
|
include Hydra::AccessControlsEnforcement
|
7
7
|
include Hydra::PolicyAwareAccessControlsEnforcement
|
8
8
|
attr_accessor :params
|
9
9
|
|
10
|
-
def
|
11
|
-
current_user
|
10
|
+
def current_ability
|
11
|
+
@current_ability ||= Ability.new(current_user)
|
12
12
|
end
|
13
13
|
|
14
14
|
def session
|
@@ -64,7 +64,7 @@ describe Hydra::PolicyAwareAccessControlsEnforcement do
|
|
64
64
|
@sample_policies.each {|p| p.delete }
|
65
65
|
end
|
66
66
|
|
67
|
-
subject {
|
67
|
+
subject { PolicyMockController.new }
|
68
68
|
|
69
69
|
before do
|
70
70
|
@solr_parameters = {}
|
@@ -96,12 +96,12 @@ describe Hydra::PolicyAwareAccessControlsEnforcement do
|
|
96
96
|
policy_pids = (1..6).map {|n| "test:policy#{n}"}
|
97
97
|
subject.should_receive(:policies_with_access).and_return(policy_pids)
|
98
98
|
subject.apply_gated_discovery(@solr_parameters, @user_parameters)
|
99
|
-
@solr_parameters[:fq].first.should include(" OR (
|
99
|
+
@solr_parameters[:fq].first.should include(" OR (#{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy1 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy2 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy3 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy4 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy5 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy6)")
|
100
100
|
end
|
101
101
|
it "should not change anything if there are no clauses to add" do
|
102
102
|
subject.stub(:policy_clauses).and_return(nil)
|
103
103
|
subject.apply_gated_discovery(@solr_parameters, @user_parameters)
|
104
|
-
@solr_parameters[:fq].first.should_not include(" OR (
|
104
|
+
@solr_parameters[:fq].first.should_not include(" OR (#{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy1 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy2 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy3 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy4 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy5 OR #{ActiveFedora::SolrService.solr_name('is_governed_by', :symbol)}:info\\:fedora/test\\:policy6)")
|
105
105
|
end
|
106
106
|
end
|
107
107
|
end
|
@@ -61,11 +61,11 @@ describe Hydra::ModelMixins::RightsMetadata do
|
|
61
61
|
result = subject.rightsMetadata.to_solr
|
62
62
|
result.size.should == 4
|
63
63
|
## Wrote the test in this way, because the implementation uses a hash, and the hash order is not deterministic (especially in ruby 1.8.7)
|
64
|
-
result['
|
65
|
-
result['
|
66
|
-
result['
|
67
|
-
result['
|
68
|
-
result['
|
64
|
+
result['read_access_group_tsim'].size.should == 2
|
65
|
+
result['read_access_group_tsim'].should include('group-6', 'group-7')
|
66
|
+
result['edit_access_group_tsim'].should == ['group-8']
|
67
|
+
result['discover_access_person_tsim'].should == ['person2']
|
68
|
+
result['read_access_person_tsim'].should == ['person1']
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydra-access-controls
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.0.
|
4
|
+
version: 6.0.0.pre2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -34,17 +34,17 @@ dependencies:
|
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|
35
35
|
none: false
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - '='
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
39
|
+
version: 6.0.0.pre2
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
none: false
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 6.0.0.pre2
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: cancan
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|