hydra-access-controls 6.0.0.pre1 → 6.0.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|