hydra-access-controls 10.5.0 → 10.5.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ed94a3c77e4473df017f3e8d932af844b5bc4eda
4
- data.tar.gz: 14bf723d584d15d01d35882b3be61fa4d2c14fa5
3
+ metadata.gz: 2ff67011c0dfacf46f43a710b1bf75be300c91f8
4
+ data.tar.gz: 9894ed9ca3d96943443058a9546b32cdd71c8a8c
5
5
  SHA512:
6
- metadata.gz: ac4802b6ab1511152cef8d8f9c4c27194eb6e5f90e4439f35130497d17bb72ccd7676be420a1c80ea487b7bda2f60595dee9acec091e80fcf9a911d8dd8fece8
7
- data.tar.gz: 0f3830cef55ada92f0d9cb4250e433ac56b331eba178e4cbaea785aa68748cfff57355dc2ded2a60d511255b65abc173332ff4179f971642a0d5c955845d2b59
6
+ metadata.gz: 41a3c4f41486967062df9adb768a6002eb5762967e70ce225dfa474eb2c293c2b86edea0a0b7cc935e57518bbcc1dd4d7ea2124b2dc514e600e0221ab209a0fb
7
+ data.tar.gz: c862bc4aa6120634f94370b7d0a0d72c579e4f07de7f135fff793c9ca65024519fbe5462777659ab89c5d91fc0a83955981722aa56284cec9615d82b773614c4
@@ -1,27 +1,26 @@
1
1
  # Repeats access controls evaluation methods, but checks against a governing "Policy" object (or "Collection" object) that provides inherited access controls.
2
2
  module Hydra::PolicyAwareAccessControlsEnforcement
3
3
 
4
- # Extends Hydra::AccessControlsEnforcement.apply_gated_discovery to reflect policy-provided access
5
- # appends the result of policy_clauses into the :fq
6
- # @param solr_parameters the current solr parameters
7
- # @param user_parameters the current user-subitted parameters
4
+ # Extends Hydra::AccessControlsEnforcement.apply_gated_discovery to reflect policy-provided access.
5
+ # Appends the result of policy_clauses into the :fq
6
+ # @param [Hash] solr_parameters the current solr parameters, to be modified herein!
8
7
  def apply_gated_discovery(solr_parameters)
9
8
  super
10
9
  logger.debug("POLICY-aware Solr parameters: #{ solr_parameters.inspect }")
11
10
  end
12
11
 
13
- # returns solr query for finding all objects whose policies grant discover access to current_user
12
+ # @return [String,nil] solr query for finding all objects whose policies grant discover access to current_user
14
13
  def policy_clauses
15
14
  policy_ids = policies_with_access
16
15
  return nil if policy_ids.empty?
17
16
  '(' + policy_ids.map {|id| ActiveFedora::SolrQueryBuilder.construct_query_for_rel(isGovernedBy: id)}.join(' OR '.freeze) + ')'
18
17
  end
19
18
 
20
- # find all the policies that grant discover/read/edit permissions to this user or any of its groups
19
+ # Find all the policies that grant discover/read/edit permissions to this user or any of its groups.
20
+ # Grant access based on user id & group
21
21
  def policies_with_access
22
22
  #### TODO -- Memoize this and put it in the session?
23
23
  user_access_filters = []
24
- # Grant access based on user id & group
25
24
  user_access_filters += apply_policy_group_permissions(discovery_permissions)
26
25
  user_access_filters += apply_policy_user_permissions(discovery_permissions)
27
26
  result = policy_class.search_with_conditions( user_access_filters.join(" OR "), fl: "id", rows: policy_class.count )
@@ -29,8 +28,9 @@ module Hydra::PolicyAwareAccessControlsEnforcement
29
28
  result.map {|h| h['id']}
30
29
  end
31
30
 
31
+ # for groups
32
+ # @param [Array{String,#to_sym}] permission_types symbols (or equivalent) from Hydra.config.permissions.inheritable
32
33
  def apply_policy_group_permissions(permission_types = discovery_permissions)
33
- # for groups
34
34
  user_access_filters = []
35
35
  current_ability.user_groups.each_with_index do |group, i|
36
36
  permission_types.each do |type|
@@ -40,8 +40,9 @@ module Hydra::PolicyAwareAccessControlsEnforcement
40
40
  user_access_filters
41
41
  end
42
42
 
43
+ # for individual user access
44
+ # @param [Array{String,#to_sym}] permission_types
43
45
  def apply_policy_user_permissions(permission_types = discovery_permissions)
44
- # for individual user access
45
46
  user = current_ability.current_user
46
47
  return [] unless user && user.user_key.present?
47
48
  permission_types.map do |type|
@@ -1,4 +1,4 @@
1
- FactoryGirl.define do
1
+ FactoryBot.define do
2
2
 
3
3
  # Users
4
4
 
@@ -5,19 +5,19 @@ describe Hydra::EmbargoService do
5
5
  let(:past_date) { 2.days.ago }
6
6
 
7
7
  let!(:work_with_expired_embargo1) do
8
- FactoryGirl.build(:asset, embargo_release_date: past_date.to_s).tap do |work|
8
+ FactoryBot.build(:asset, embargo_release_date: past_date.to_s).tap do |work|
9
9
  work.save(validate:false)
10
10
  end
11
11
  end
12
12
 
13
13
  let!(:work_with_expired_embargo2) do
14
- FactoryGirl.build(:asset, embargo_release_date: past_date.to_s).tap do |work|
14
+ FactoryBot.build(:asset, embargo_release_date: past_date.to_s).tap do |work|
15
15
  work.save(validate:false)
16
16
  end
17
17
  end
18
18
 
19
- let!(:work_with_embargo_in_effect) { FactoryGirl.create(:asset, embargo_release_date: future_date.to_s)}
20
- let!(:work_without_embargo) { FactoryGirl.create(:asset)}
19
+ let!(:work_with_embargo_in_effect) { FactoryBot.create(:asset, embargo_release_date: future_date.to_s)}
20
+ let!(:work_without_embargo) { FactoryBot.create(:asset)}
21
21
 
22
22
  describe "#assets_with_expired_embargoes" do
23
23
  it "returns an array of assets with expired embargoes" do
@@ -5,19 +5,19 @@ describe Hydra::LeaseService do
5
5
  let(:past_date) { 2.days.ago }
6
6
 
7
7
  let!(:work_with_expired_lease1) do
8
- FactoryGirl.build(:asset, lease_expiration_date: past_date.to_s).tap do |work|
8
+ FactoryBot.build(:asset, lease_expiration_date: past_date.to_s).tap do |work|
9
9
  work.save(validate: false)
10
10
  end
11
11
  end
12
12
 
13
13
  let!(:work_with_expired_lease2) do
14
- FactoryGirl.build(:asset, lease_expiration_date: past_date.to_s).tap do |work|
14
+ FactoryBot.build(:asset, lease_expiration_date: past_date.to_s).tap do |work|
15
15
  work.save(validate: false)
16
16
  end
17
17
  end
18
18
 
19
- let!(:work_with_lease_in_effect) { FactoryGirl.create(:asset, lease_expiration_date: future_date.to_s)}
20
- let!(:work_without_lease) { FactoryGirl.create(:asset)}
19
+ let!(:work_with_lease_in_effect) { FactoryBot.create(:asset, lease_expiration_date: future_date.to_s)}
20
+ let!(:work_without_lease) { FactoryBot.create(:asset)}
21
21
 
22
22
  describe "#assets_with_expired_leases" do
23
23
  it "returns an array of assets with expired embargoes" do
@@ -35,7 +35,7 @@ ActiveSupport::Dependencies.autoload_paths += relative_load_paths
35
35
  require 'support/mods_asset'
36
36
  require 'support/solr_document'
37
37
  require "support/user"
38
- require "factory_girl"
38
+ require "factory_bot"
39
39
  require 'rspec/mocks'
40
40
  require 'rspec/its'
41
41
  require "factories"
@@ -31,7 +31,7 @@ describe Ability do
31
31
  end
32
32
 
33
33
  context "for a signed in user" do
34
- let(:user) { FactoryGirl.build(:registered_user) }
34
+ let(:user) { FactoryBot.build(:registered_user) }
35
35
 
36
36
  it { should_not be_able_to(:create, ActiveFedora::Base) }
37
37
  end
@@ -42,7 +42,7 @@ describe Ability do
42
42
  # Test coverage for discover permission is in spec/requests/gated_discovery_spec.rb
43
43
 
44
44
  describe "Given an asset that has been made publicly discoverable" do
45
- let(:asset) { FactoryGirl.create(:asset) }
45
+ let(:asset) { FactoryBot.create(:asset) }
46
46
  before do
47
47
  asset.permissions_attributes = [{ name: "public", access: "discover", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }, { name: "calvin_collaborator", access: "edit", type: "person" }]
48
48
  asset.save
@@ -58,7 +58,7 @@ describe Ability do
58
58
  end
59
59
 
60
60
  context "Then a registered user" do
61
- let(:user) { FactoryGirl.build(:registered_user) }
61
+ let(:user) { FactoryBot.build(:registered_user) }
62
62
  it { should be_able_to(:discover, asset) }
63
63
  it { should_not be_able_to(:read, asset) }
64
64
  it { should_not be_able_to(:edit, asset) }
@@ -68,8 +68,8 @@ describe Ability do
68
68
  end
69
69
 
70
70
  describe "Given an asset that has been made publicly available (ie. open access)" do
71
- #let(:asset) { FactoryGirl.create(:open_access_asset) }
72
- let(:asset) { FactoryGirl.create(:asset) }
71
+ #let(:asset) { FactoryBot.create(:open_access_asset) }
72
+ let(:asset) { FactoryBot.create(:asset) }
73
73
  before do
74
74
  asset.permissions_attributes = [{ name: "public", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }, { name: "calvin_collaborator", access: "edit", type: "person" }]
75
75
  asset.save
@@ -85,7 +85,7 @@ describe Ability do
85
85
  end
86
86
 
87
87
  context "Then a registered user" do
88
- let(:user) { FactoryGirl.build(:registered_user) }
88
+ let(:user) { FactoryBot.build(:registered_user) }
89
89
  it { should be_able_to(:discover, asset) }
90
90
  it { should be_able_to(:read, asset) }
91
91
  it { should_not be_able_to(:edit, asset) }
@@ -95,7 +95,7 @@ describe Ability do
95
95
  end
96
96
 
97
97
  describe "Given an asset with no custom access set" do
98
- let(:asset) { FactoryGirl.create(:asset) }
98
+ let(:asset) { FactoryBot.create(:asset) }
99
99
  before do
100
100
  asset.permissions_attributes = [{ name: "joe_creator", access: "edit", type: "person" }]
101
101
  asset.save
@@ -110,7 +110,7 @@ describe Ability do
110
110
  it { should_not be_able_to(:destroy, asset) }
111
111
  end
112
112
  context "Then a registered user" do
113
- let(:user) { FactoryGirl.build(:registered_user) }
113
+ let(:user) { FactoryBot.build(:registered_user) }
114
114
  it { should_not be_able_to(:discover, asset) }
115
115
  it { should_not be_able_to(:read, asset) }
116
116
  it { should_not be_able_to(:edit, asset) }
@@ -118,7 +118,7 @@ describe Ability do
118
118
  it { should_not be_able_to(:destroy, asset) }
119
119
  end
120
120
  context "Then the Creator" do
121
- let(:user) { FactoryGirl.build(:joe_creator) }
121
+ let(:user) { FactoryBot.build(:joe_creator) }
122
122
  it { should be_able_to(:discover, asset) }
123
123
  it { should be_able_to(:read, asset) }
124
124
  it { should be_able_to(:edit, asset) }
@@ -132,14 +132,14 @@ describe Ability do
132
132
  end
133
133
 
134
134
  describe "Given an asset which registered users have read access to" do
135
- # let(:asset) { FactoryGirl.create(:org_read_access_asset) }
136
- let(:asset) { FactoryGirl.create(:asset) }
135
+ # let(:asset) { FactoryBot.create(:org_read_access_asset) }
136
+ let(:asset) { FactoryBot.create(:asset) }
137
137
  before do
138
138
  asset.permissions_attributes = [{ name: "registered", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }, { name: "calvin_collaborator", access: "edit", type: "person" }]
139
139
  asset.save
140
140
  end
141
141
  context "The a registered user" do
142
- let(:user) { FactoryGirl.build(:registered_user) }
142
+ let(:user) { FactoryBot.build(:registered_user) }
143
143
  before do
144
144
  allow(user).to receive(:new_record?).and_return(false)
145
145
  end
@@ -154,7 +154,7 @@ describe Ability do
154
154
  end
155
155
 
156
156
  describe "Given an asset with collaborator" do
157
- let(:asset) { FactoryGirl.create(:asset) }
157
+ let(:asset) { FactoryBot.create(:asset) }
158
158
  before do
159
159
  asset.permissions_attributes = [{ name:"africana-faculty", access: "edit", type: "group" }, {name: "calvin_collaborator", access: "edit", type: "person"}]
160
160
  asset.save
@@ -162,7 +162,7 @@ describe Ability do
162
162
  after { asset.destroy }
163
163
 
164
164
  context "Then a collaborator with edit access (user permision)" do
165
- let(:user) { FactoryGirl.build(:calvin_collaborator) }
165
+ let(:user) { FactoryBot.build(:calvin_collaborator) }
166
166
 
167
167
  it { should be_able_to(:discover, asset) }
168
168
  it { should be_able_to(:read, asset) }
@@ -173,7 +173,7 @@ describe Ability do
173
173
  end
174
174
 
175
175
  context "Then a collaborator with edit access (group permision)" do
176
- let(:user) { FactoryGirl.build(:martia_morocco) }
176
+ let(:user) { FactoryBot.build(:martia_morocco) }
177
177
  before do
178
178
  allow(user).to receive(:groups).and_return(["faculty", "africana-faculty"])
179
179
  end
@@ -183,14 +183,14 @@ describe Ability do
183
183
  end
184
184
 
185
185
  describe "Given an asset where dept can read & registered users can discover" do
186
- # let(:asset) { FactoryGirl.create(:dept_access_asset) }
187
- let(:asset) { FactoryGirl.create(:asset) }
186
+ # let(:asset) { FactoryBot.create(:dept_access_asset) }
187
+ let(:asset) { FactoryBot.create(:asset) }
188
188
  before do
189
189
  asset.permissions_attributes = [{ name: "africana-faculty", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }]
190
190
  asset.save
191
191
  end
192
192
  context "Then a registered user" do
193
- let(:user) { FactoryGirl.build(:registered_user) }
193
+ let(:user) { FactoryBot.build(:registered_user) }
194
194
 
195
195
  it { should_not be_able_to(:discover, asset) }
196
196
  it { should_not be_able_to(:read, asset) }
@@ -201,7 +201,7 @@ describe Ability do
201
201
  end
202
202
 
203
203
  context "Then someone whose role/group has read access" do
204
- let(:user) { FactoryGirl.build(:martia_morocco) }
204
+ let(:user) { FactoryBot.build(:martia_morocco) }
205
205
  before do
206
206
  allow(user).to receive(:groups).and_return(["faculty", "africana-faculty"])
207
207
  end
@@ -228,7 +228,7 @@ describe Ability do
228
228
  end
229
229
  end
230
230
  end
231
- let(:user) { FactoryGirl.build(:staff) }
231
+ let(:user) { FactoryBot.build(:staff) }
232
232
 
233
233
  after do
234
234
  Object.send(:remove_const, :MyAbility)
@@ -241,13 +241,13 @@ describe Ability do
241
241
  end
242
242
 
243
243
  describe "calling ability on two separate objects" do
244
- let(:asset1) { FactoryGirl.create(:asset) }
245
- let(:asset2) { FactoryGirl.create(:asset) }
244
+ let(:asset1) { FactoryBot.create(:asset) }
245
+ let(:asset2) { FactoryBot.create(:asset) }
246
246
  before do
247
247
  asset1.permissions_attributes = [{ name: "registered", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }, { name: "calvin_collaborator", access: "edit", type: "person" }]
248
248
  asset1.save
249
249
  end
250
- let(:user) { FactoryGirl.build(:calvin_collaborator) } # has access to @asset1, but not @asset2
250
+ let(:user) { FactoryBot.build(:calvin_collaborator) } # has access to @asset1, but not @asset2
251
251
  after do
252
252
  asset1.destroy
253
253
  asset2.destroy
@@ -261,8 +261,8 @@ describe Ability do
261
261
  end
262
262
 
263
263
  describe "download permissions" do
264
- let(:asset) { FactoryGirl.create(:asset) }
265
- let(:user) { FactoryGirl.build(:user) }
264
+ let(:asset) { FactoryBot.create(:asset) }
265
+ let(:user) { FactoryBot.build(:user) }
266
266
  let(:file) { ActiveFedora::File.new() }
267
267
 
268
268
  before { allow(file).to receive(:uri).and_return(uri) }
@@ -1,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "active_fedora/accessible_by" do
4
- let(:user) {FactoryGirl.build(:ira_instructor)}
4
+ let(:user) {FactoryBot.build(:ira_instructor)}
5
5
  let(:ability) {Ability.new(user)}
6
- let(:private_obj) {FactoryGirl.create(:asset)}
7
- let(:public_obj) {FactoryGirl.create(:asset)}
8
- let(:editable_obj) {FactoryGirl.create(:asset)}
6
+ let(:private_obj) {FactoryBot.create(:asset)}
7
+ let(:public_obj) {FactoryBot.create(:asset)}
8
+ let(:editable_obj) {FactoryBot.create(:asset)}
9
9
 
10
10
  before do
11
11
  private_obj.permissions_attributes = [{ name: "joe_creator", access: "edit", type: "person" }]
@@ -120,7 +120,7 @@ describe Hydra::AdminPolicy do
120
120
  # Policy-based Access Controls
121
121
  #
122
122
  describe "When accessing assets with Policies associated" do
123
- let(:user) { FactoryGirl.build(:martia_morocco) }
123
+ let(:user) { FactoryBot.build(:martia_morocco) }
124
124
 
125
125
  before do
126
126
  allow(user).to receive(:groups).and_return(["faculty", "africana-faculty"])
@@ -62,7 +62,7 @@ describe Hydra::AccessControls::Permission do
62
62
 
63
63
  context 'with a User instance passed as :name argument' do
64
64
  let(:permission) { described_class.new(type: 'person', name: user, access: 'read') }
65
- let(:user) { FactoryGirl.build(:archivist, email: 'archivist1@example.com') }
65
+ let(:user) { FactoryBot.build(:archivist, email: 'archivist1@example.com') }
66
66
 
67
67
  it "uses string and escape agent when building" do
68
68
  expect(permission.agent.first.rdf_subject.to_s).to eq 'http://projecthydra.org/ns/auth/person#archivist1@example.com'
@@ -92,7 +92,7 @@ describe Hydra::PolicyAwareAccessControlsEnforcement do
92
92
 
93
93
  let(:current_ability) { Ability.new(user) }
94
94
  subject { PolicyMockSearchBuilder.new(current_ability) }
95
- let(:user) { FactoryGirl.build(:sara_student) }
95
+ let(:user) { FactoryBot.build(:sara_student) }
96
96
 
97
97
  before do
98
98
  @solr_parameters = {}
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: 10.5.0
4
+ version: 10.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-06-09 00:00:00.000000000 Z
13
+ date: 2018-04-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -237,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
237
  version: '0'
238
238
  requirements: []
239
239
  rubyforge_project:
240
- rubygems_version: 2.6.12
240
+ rubygems_version: 2.6.14
241
241
  signing_key:
242
242
  specification_version: 4
243
243
  summary: Access controls for project hydra