hydra-access-controls 11.0.0.rc1 → 11.0.0.rc2
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 +4 -4
- data/app/models/concerns/hydra/access_controls/permissions.rb +1 -1
- data/app/models/hydra/access_control.rb +2 -2
- data/app/models/role_mapper.rb +3 -5
- data/app/services/hydra/embargo_service.rb +1 -1
- data/app/services/hydra/lease_service.rb +1 -2
- data/hydra-access-controls.gemspec +4 -4
- data/lib/active_fedora/accessible_by.rb +3 -9
- data/lib/hydra-access-controls.rb +9 -6
- data/lib/hydra/access_controls_enforcement.rb +0 -6
- data/lib/hydra/policy_aware_access_controls_enforcement.rb +0 -6
- data/spec/factories.rb +29 -29
- data/spec/services/embargo_service_spec.rb +0 -1
- data/spec/spec_helper.rb +14 -5
- data/spec/support/user.rb +1 -1
- data/spec/unit/accessible_by_spec.rb +1 -1
- data/spec/unit/permissions_spec.rb +7 -4
- data/spec/unit/policy_aware_access_controls_enforcement_spec.rb +5 -6
- data/tasks/hydra-access-controls.rake +1 -1
- metadata +24 -27
- data/app/search_builders/hydra/access_controls/policy_aware_search_builder.rb +0 -97
- data/app/search_builders/hydra/access_controls/search_builder.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1c375e2d0865e3c30b810323eab035c5ecd19e058417c7bf1c486c360862df5
|
4
|
+
data.tar.gz: 209bdc9997eead2dac861e6c628555c3d1367a47ab2a79485d75d1634641e845
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cccfdc0d8acf8d16fe0a78f7e953c7f2a9ee5760431ebca7f8c726b223faff8e9faffb89ebeaf77c0f3359f454170a64662b791743fe066915ece9412cdb808f
|
7
|
+
data.tar.gz: 24be0383b71eeac26a4517c49f6a11c4c19595bf8d788278f32f3c62d62cf94523a8bae5fa533a2cb941c9183497bdd701c4661691906c470da2916bf54ebcdf
|
@@ -31,11 +31,11 @@ module Hydra
|
|
31
31
|
obj.update(attributes.except(:id, '_destroy'))
|
32
32
|
end
|
33
33
|
else
|
34
|
-
relationship.
|
34
|
+
relationship.build(attributes)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
# Poison the cache
|
38
|
-
relationship.reset if any_destroyed
|
38
|
+
save! && relationship.reset if any_destroyed
|
39
39
|
end
|
40
40
|
|
41
41
|
def relationship
|
data/app/models/role_mapper.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
# RoleMapper This is used by
|
2
|
-
#
|
3
|
-
#
|
4
|
-
# should include a Module that implements the same behaviors as
|
5
|
-
# Hydra::RoleMapperBehavior
|
1
|
+
# RoleMapper This is used by AccessControlsEnforcement to get users' Roles (used in access permissions)
|
2
|
+
# If you are using something like Shibboleth or LDAP to get users' Roles, you should override this Class.
|
3
|
+
# Your override should include a Module that implements the same behaviors as Hydra::RoleMapperBehavior
|
6
4
|
class RoleMapper
|
7
5
|
include Hydra::RoleMapperBehavior
|
8
6
|
end
|
@@ -14,7 +14,7 @@ module Hydra
|
|
14
14
|
# (assumes that when lease visibility is applied to assets
|
15
15
|
# whose leases have expired, the lease expiration date will be removed from its metadata)
|
16
16
|
def assets_under_embargo
|
17
|
-
ActiveFedora::Base.where("#{Hydra.config.permissions.embargo.release_date}
|
17
|
+
ActiveFedora::Base.where("#{Hydra.config.permissions.embargo.release_date}:[* TO *]")
|
18
18
|
end
|
19
19
|
|
20
20
|
# Returns all assets that have had embargoes deactivated in the past.
|
@@ -10,7 +10,7 @@ module Hydra
|
|
10
10
|
# (assumes that when lease visibility is applied to assets
|
11
11
|
# whose leases have expired, the lease expiration date will be removed from its metadata)
|
12
12
|
def assets_under_lease
|
13
|
-
ActiveFedora::Base.where("#{Hydra.config.permissions.lease.expiration_date}
|
13
|
+
ActiveFedora::Base.where("#{Hydra.config.permissions.lease.expiration_date}:[* TO *]")
|
14
14
|
end
|
15
15
|
|
16
16
|
# Returns all assets that have had embargoes deactivated in the past.
|
@@ -20,4 +20,3 @@ module Hydra
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.email = ["hydra-tech@googlegroups.com"]
|
7
7
|
gem.description = %q{Access controls for project hydra}
|
8
8
|
gem.summary = %q{Access controls for project hydra}
|
9
|
-
gem.homepage = "
|
9
|
+
gem.homepage = "https://github.com/samvera/hydra-head/tree/master/hydra-access-controls"
|
10
10
|
|
11
11
|
gem.files = `git ls-files`.split($\)
|
12
12
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -19,11 +19,11 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.required_ruby_version = '>= 1.9.3'
|
20
20
|
|
21
21
|
gem.add_dependency 'activesupport', '>= 4', '< 6'
|
22
|
-
gem.add_dependency "active-fedora", '
|
22
|
+
gem.add_dependency "active-fedora", '>= 10.0.0'
|
23
|
+
gem.add_dependency "blacklight", '>= 5.16'
|
24
|
+
gem.add_dependency "blacklight-access_controls", '~> 0.6.0'
|
23
25
|
gem.add_dependency 'cancancan', '~> 1.8'
|
24
26
|
gem.add_dependency 'deprecation', '~> 1.0'
|
25
|
-
gem.add_dependency "blacklight", '>= 5.16'
|
26
|
-
gem.add_dependency "blacklight-access_controls", '~> 0.7.0.rc1'
|
27
27
|
|
28
28
|
gem.add_development_dependency "rake", '~> 10.1'
|
29
29
|
gem.add_development_dependency 'rspec', '~> 3.1'
|
@@ -1,5 +1,8 @@
|
|
1
1
|
ActiveFedora::QueryMethods.module_eval do
|
2
2
|
extend ActiveSupport::Concern
|
3
|
+
included do
|
4
|
+
include Hydra::AccessControlsEnforcement
|
5
|
+
end
|
3
6
|
|
4
7
|
def accessible_by(ability, action = :index)
|
5
8
|
permission_types = case action
|
@@ -11,15 +14,6 @@ ActiveFedora::QueryMethods.module_eval do
|
|
11
14
|
filters = gated_discovery_filters(permission_types, ability).join(" OR ")
|
12
15
|
spawn.where!(filters)
|
13
16
|
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def gated_discovery_filters(types, ability)
|
18
|
-
search_builder = Hydra::AccessControls::SearchBuilder.new(self,
|
19
|
-
ability: ability,
|
20
|
-
permission_types: types)
|
21
|
-
search_builder.send(:gated_discovery_filters)
|
22
|
-
end
|
23
17
|
end
|
24
18
|
|
25
19
|
ActiveFedora::Querying.module_eval do
|
@@ -29,12 +29,7 @@ module Hydra
|
|
29
29
|
alias :config :configure
|
30
30
|
end
|
31
31
|
|
32
|
-
class Engine < Rails::Engine
|
33
|
-
# autoload_paths is only necessary for Rails 3
|
34
|
-
config.autoload_paths += %W(
|
35
|
-
#{config.root}/app/models/concerns
|
36
|
-
)
|
37
|
-
end
|
32
|
+
class Engine < Rails::Engine; end
|
38
33
|
|
39
34
|
# This error is raised when a user isn't allowed to access a given controller action.
|
40
35
|
# This usually happens within a call to AccessControlsEnforcement#enforce_access_controls but can be
|
@@ -43,3 +38,11 @@ module Hydra
|
|
43
38
|
end
|
44
39
|
|
45
40
|
require 'active_fedora/accessible_by'
|
41
|
+
|
42
|
+
# While we support ActiveFedora 10 and 11, alias ActiveFedora::Indexing and
|
43
|
+
# ActiveFedora::Indexing::Inserter to Solrizer
|
44
|
+
require 'active_fedora/version'
|
45
|
+
if ActiveFedora.version.split('.').first.to_i < 12
|
46
|
+
ActiveFedora::Indexing::Inserter = Solrizer
|
47
|
+
ActiveFedora::Indexing::Descriptor = Solrizer::Descriptor
|
48
|
+
end
|
@@ -2,12 +2,6 @@ module Hydra::AccessControlsEnforcement
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
include Blacklight::AccessControls::Enforcement
|
4
4
|
|
5
|
-
included do
|
6
|
-
Deprecation.warn(self, 'Hydra::AccessControlsEnforcement is deprecated ' \
|
7
|
-
'and will be removed in version 11. Use ' \
|
8
|
-
'Hydra::AccessControls::SearchBuilder instead.')
|
9
|
-
end
|
10
|
-
|
11
5
|
protected
|
12
6
|
|
13
7
|
def under_embargo?
|
@@ -1,11 +1,5 @@
|
|
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
|
-
extend ActiveSupport::Concern
|
4
|
-
included do
|
5
|
-
Deprecation.warn(self, 'Hydra::PolicyAwareAccessControlsEnforcement is deprecated ' \
|
6
|
-
'and will be removed in version 11. Use ' \
|
7
|
-
'Hydra::AccessControls::PolicyAwareSearchBuilder instead.')
|
8
|
-
end
|
9
3
|
|
10
4
|
# Extends Hydra::AccessControlsEnforcement.apply_gated_discovery to reflect policy-provided access.
|
11
5
|
# Appends the result of policy_clauses into the :fq
|
data/spec/factories.rb
CHANGED
@@ -11,52 +11,52 @@ FactoryBot.define do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
factory :archivist, :parent=>:user do |u|
|
14
|
-
uid 'archivist1'
|
15
|
-
password 'archivist1'
|
14
|
+
uid { 'archivist1' }
|
15
|
+
password { 'archivist1' }
|
16
16
|
end
|
17
17
|
factory :registered_user, :parent=>:user do |u|
|
18
|
-
uid 'registered_user'
|
19
|
-
password 'registered_user'
|
18
|
+
uid { 'registered_user' }
|
19
|
+
password { 'registered_user' }
|
20
20
|
end
|
21
21
|
factory :staff, :parent=>:user do |u|
|
22
|
-
uid 'staff1'
|
23
|
-
password 'staff1'
|
22
|
+
uid { 'staff1' }
|
23
|
+
password { 'staff1' }
|
24
24
|
end
|
25
25
|
factory :student, :parent=>:user do |u|
|
26
|
-
uid 'student1'
|
27
|
-
password 'student1'
|
26
|
+
uid { 'student1' }
|
27
|
+
password { 'student1' }
|
28
28
|
end
|
29
29
|
factory :joe_creator, :parent=>:user do |u|
|
30
|
-
uid 'joe_creator'
|
31
|
-
password 'joe_creator'
|
30
|
+
uid { 'joe_creator' }
|
31
|
+
password { 'joe_creator' }
|
32
32
|
end
|
33
33
|
factory :martia_morocco, :parent=>:user do |u|
|
34
|
-
uid 'martia_morocco'
|
35
|
-
password 'martia_morocco'
|
34
|
+
uid { 'martia_morocco' }
|
35
|
+
password { 'martia_morocco' }
|
36
36
|
end
|
37
37
|
factory :ira_instructor, :parent=>:user do |u|
|
38
|
-
uid 'ira_instructor'
|
39
|
-
password 'ira_instructor'
|
38
|
+
uid { 'ira_instructor' }
|
39
|
+
password { 'ira_instructor' }
|
40
40
|
end
|
41
41
|
factory :calvin_collaborator, :parent=>:user do |u|
|
42
|
-
uid 'calvin_collaborator'
|
43
|
-
password 'calvin_collaborator'
|
42
|
+
uid { 'calvin_collaborator' }
|
43
|
+
password { 'calvin_collaborator' }
|
44
44
|
end
|
45
45
|
factory :sara_student, :parent=>:user do |u|
|
46
|
-
uid 'sara_student'
|
47
|
-
password 'sara_student'
|
46
|
+
uid { 'sara_student' }
|
47
|
+
password { 'sara_student' }
|
48
48
|
end
|
49
49
|
factory :louis_librarian, :parent=>:user do |u|
|
50
|
-
uid 'louis_librarian'
|
51
|
-
password 'louis_librarian'
|
50
|
+
uid { 'louis_librarian' }
|
51
|
+
password { 'louis_librarian' }
|
52
52
|
end
|
53
53
|
factory :carol_curator, :parent=>:user do |u|
|
54
|
-
uid 'carol_curator'
|
55
|
-
password 'carol_curator'
|
54
|
+
uid { 'carol_curator' }
|
55
|
+
password { 'carol_curator' }
|
56
56
|
end
|
57
57
|
factory :alice_admin, :parent=>:user do |u|
|
58
|
-
uid 'alice_admin'
|
59
|
-
password 'alice_admin'
|
58
|
+
uid { 'alice_admin' }
|
59
|
+
password { 'alice_admin' }
|
60
60
|
end
|
61
61
|
|
62
62
|
#
|
@@ -70,23 +70,23 @@ FactoryBot.define do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
factory :default_access_asset, :parent=>:asset do |a|
|
73
|
-
permissions_attributes [{ name: "joe_creator", access: "edit", type: "person" }]
|
73
|
+
permissions_attributes { [{ name: "joe_creator", access: "edit", type: "person" }] }
|
74
74
|
end
|
75
75
|
|
76
76
|
factory :dept_access_asset, :parent=>:asset do |a|
|
77
|
-
permissions_attributes [{ name: "africana-faculty", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }]
|
77
|
+
permissions_attributes { [{ name: "africana-faculty", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }] }
|
78
78
|
end
|
79
79
|
|
80
80
|
factory :group_edit_asset, :parent=>:asset do |a|
|
81
|
-
permissions_attributes [{ name:"africana-faculty", access: "edit", type: "group" }, {name: "calvin_collaborator", access: "edit", type: "person"}]
|
81
|
+
permissions_attributes { [{ name:"africana-faculty", access: "edit", type: "group" }, {name: "calvin_collaborator", access: "edit", type: "person"}] }
|
82
82
|
end
|
83
83
|
|
84
84
|
factory :org_read_access_asset, :parent=>:asset do |a|
|
85
|
-
permissions_attributes [{ name: "registered", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }, { name: "calvin_collaborator", access: "edit", type: "person" }]
|
85
|
+
permissions_attributes { [{ name: "registered", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }, { name: "calvin_collaborator", access: "edit", type: "person" }] }
|
86
86
|
end
|
87
87
|
|
88
88
|
factory :open_access_asset, :parent=>:asset do |a|
|
89
|
-
permissions_attributes [{ name: "public", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }, { name: "calvin_collaborator", access: "edit", type: "person" }]
|
89
|
+
permissions_attributes { [{ name: "public", access: "read", type: "group" }, { name: "joe_creator", access: "edit", type: "person" }, { name: "calvin_collaborator", access: "edit", type: "person" }] }
|
90
90
|
end
|
91
91
|
|
92
92
|
end
|
@@ -29,7 +29,6 @@ describe Hydra::EmbargoService do
|
|
29
29
|
|
30
30
|
describe "#assets_under_embargo" do
|
31
31
|
it "returns all assets with embargo release date set" do
|
32
|
-
result = subject.assets_under_embargo
|
33
32
|
returned_ids = subject.assets_under_embargo.map {|a| a.id}
|
34
33
|
expect(returned_ids).to include work_with_expired_embargo1.id, work_with_expired_embargo2.id, work_with_embargo_in_effect.id
|
35
34
|
expect(returned_ids).to_not include work_without_embargo.id
|
data/spec/spec_helper.rb
CHANGED
@@ -11,12 +11,22 @@ Hydra::Engine.config.autoload_paths.each { |path| $LOAD_PATH.unshift path }
|
|
11
11
|
|
12
12
|
require 'byebug' unless ENV['CI']
|
13
13
|
|
14
|
-
|
14
|
+
def coverage_needed?
|
15
|
+
ENV['COVERAGE'] || ENV['CI']
|
16
|
+
end
|
17
|
+
|
18
|
+
if RUBY_VERSION =~ /^1.9/ && coverage_needed?
|
15
19
|
require 'simplecov'
|
16
|
-
require '
|
20
|
+
require 'coveralls'
|
17
21
|
|
18
|
-
SimpleCov.
|
19
|
-
SimpleCov.
|
22
|
+
SimpleCov.root(File.expand_path('../../../', __FILE__))
|
23
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(
|
24
|
+
[
|
25
|
+
SimpleCov::Formatter::HTMLFormatter,
|
26
|
+
Coveralls::SimpleCov::Formatter
|
27
|
+
]
|
28
|
+
)
|
29
|
+
SimpleCov.start('rails')
|
20
30
|
end
|
21
31
|
|
22
32
|
# Since we're not doing a Rails Engine test, we have to load these classes manually:
|
@@ -52,4 +62,3 @@ RSpec.configure do |config|
|
|
52
62
|
ActiveFedora::Cleaner.clean!
|
53
63
|
end
|
54
64
|
end
|
55
|
-
|
data/spec/support/user.rb
CHANGED
@@ -23,7 +23,7 @@ describe "active_fedora/accessible_by" do
|
|
23
23
|
|
24
24
|
describe "#accsesible_by" do
|
25
25
|
it "should return objects readable by the ability" do
|
26
|
-
expect(ModsAsset.accessible_by(ability)).to
|
26
|
+
expect(ModsAsset.accessible_by(ability)).to contain_exactly(public_obj, editable_obj)
|
27
27
|
end
|
28
28
|
it "should return object editable by the ability" do
|
29
29
|
expect(ModsAsset.accessible_by(ability, :edit)).to eq [editable_obj]
|
@@ -28,9 +28,8 @@ describe Hydra::AccessControls::Permissions do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
describe "building a new permission" do
|
31
|
-
before { subject.save! }
|
32
|
-
|
33
31
|
it "sets the accessTo association" do
|
32
|
+
subject.save!
|
34
33
|
perm = subject.permissions.build(name: 'user1', type: 'person', access: 'read')
|
35
34
|
expect(perm.access_to_id).to eq subject.id
|
36
35
|
end
|
@@ -38,9 +37,13 @@ describe Hydra::AccessControls::Permissions do
|
|
38
37
|
it "autosaves the permissions" do
|
39
38
|
subject.permissions.build(name: 'user1', type: 'person', access: 'read')
|
40
39
|
subject.save!
|
41
|
-
subject.reload
|
42
40
|
foo = Foo.find(subject.id)
|
43
|
-
|
41
|
+
|
42
|
+
expect(foo.permissions)
|
43
|
+
.to contain_exactly(have_attributes(access: 'read',
|
44
|
+
access_to_id: subject.id,
|
45
|
+
agent_name: 'user1',
|
46
|
+
type: 'person'))
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
@@ -6,10 +6,8 @@ describe Hydra::PolicyAwareAccessControlsEnforcement do
|
|
6
6
|
|
7
7
|
class PolicyMockSearchBuilder < Blacklight::SearchBuilder
|
8
8
|
include Blacklight::Solr::SearchBuilderBehavior
|
9
|
-
|
10
|
-
|
11
|
-
include Hydra::PolicyAwareAccessControlsEnforcement
|
12
|
-
end
|
9
|
+
include Hydra::AccessControlsEnforcement
|
10
|
+
include Hydra::PolicyAwareAccessControlsEnforcement
|
13
11
|
attr_accessor :params
|
14
12
|
|
15
13
|
def initialize(current_ability)
|
@@ -136,14 +134,15 @@ describe Hydra::PolicyAwareAccessControlsEnforcement do
|
|
136
134
|
|
137
135
|
context "when policies are included" do
|
138
136
|
before { subject.apply_gated_discovery(@solr_parameters) }
|
139
|
-
|
137
|
+
|
140
138
|
it "builds a query that includes all the policies" do
|
139
|
+
skip if ActiveFedora.version.split('.').first.to_i < 11
|
141
140
|
(1..11).each do |p|
|
142
141
|
expect(policy_queries).to include(/_query_:\"{!raw f=#{governed_field}}test-policy#{p}\"/)
|
143
142
|
end
|
144
143
|
end
|
145
144
|
end
|
146
|
-
|
145
|
+
|
147
146
|
context "when policies are not included" do
|
148
147
|
before do
|
149
148
|
allow(subject).to receive(:policy_clauses).and_return(nil)
|
@@ -6,7 +6,7 @@ namespace "hydra-access" do
|
|
6
6
|
fcrepo_params = { port: 8986, verbose: true, managed: true,
|
7
7
|
no_jms: true, fcrepo_home_dir: 'fcrepo4-test-data' }
|
8
8
|
SolrWrapper.wrap(solr_params) do |solr|
|
9
|
-
solr.with_collection(name: 'hydra-test', dir: File.join(File.expand_path("../..", File.dirname(__FILE__)), "solr", "
|
9
|
+
solr.with_collection(name: 'hydra-test', dir: File.join(File.expand_path("../..", File.dirname(__FILE__)), "solr", "conf")) do
|
10
10
|
FcrepoWrapper.wrap(fcrepo_params) do
|
11
11
|
Rake::Task['spec'].invoke
|
12
12
|
end
|
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: 11.0.0.
|
4
|
+
version: 11.0.0.rc2
|
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:
|
13
|
+
date: 2020-01-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -36,72 +36,72 @@ dependencies:
|
|
36
36
|
name: active-fedora
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 10.0.0
|
42
42
|
type: :runtime
|
43
43
|
prerelease: false
|
44
44
|
version_requirements: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: 10.0.0
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: blacklight
|
51
51
|
requirement: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '5.16'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
58
|
version_requirements: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - "
|
60
|
+
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '5.16'
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
64
|
+
name: blacklight-access_controls
|
65
65
|
requirement: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 0.6.0
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: 0.6.0
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
|
-
name:
|
78
|
+
name: cancancan
|
79
79
|
requirement: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
83
|
+
version: '1.8'
|
84
84
|
type: :runtime
|
85
85
|
prerelease: false
|
86
86
|
version_requirements: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
90
|
+
version: '1.8'
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
92
|
+
name: deprecation
|
93
93
|
requirement: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: '1.0'
|
98
98
|
type: :runtime
|
99
99
|
prerelease: false
|
100
100
|
version_requirements: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
102
|
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
104
|
+
version: '1.0'
|
105
105
|
- !ruby/object:Gem::Dependency
|
106
106
|
name: rake
|
107
107
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,8 +160,6 @@ files:
|
|
160
160
|
- app/models/hydra/access_controls/permission.rb
|
161
161
|
- app/models/hydra/permissions_solr_document.rb
|
162
162
|
- app/models/role_mapper.rb
|
163
|
-
- app/search_builders/hydra/access_controls/policy_aware_search_builder.rb
|
164
|
-
- app/search_builders/hydra/access_controls/search_builder.rb
|
165
163
|
- app/services/hydra/embargo_service.rb
|
166
164
|
- app/services/hydra/lease_service.rb
|
167
165
|
- app/validators/hydra/future_date_validator.rb
|
@@ -213,7 +211,7 @@ files:
|
|
213
211
|
- spec/unit/with_depositor_spec.rb
|
214
212
|
- spec/validators/future_date_validator_spec.rb
|
215
213
|
- tasks/hydra-access-controls.rake
|
216
|
-
homepage:
|
214
|
+
homepage: https://github.com/samvera/hydra-head/tree/master/hydra-access-controls
|
217
215
|
licenses:
|
218
216
|
- APACHE-2.0
|
219
217
|
metadata: {}
|
@@ -232,8 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
230
|
- !ruby/object:Gem::Version
|
233
231
|
version: 1.3.1
|
234
232
|
requirements: []
|
235
|
-
|
236
|
-
rubygems_version: 2.7.1
|
233
|
+
rubygems_version: 3.0.4
|
237
234
|
signing_key:
|
238
235
|
specification_version: 4
|
239
236
|
summary: Access controls for project hydra
|
@@ -1,97 +0,0 @@
|
|
1
|
-
module Hydra
|
2
|
-
module AccessControls
|
3
|
-
# A SearchBuilder that applies filters that are expressed within policies.
|
4
|
-
# The permissions on the policy are inherited by the objects goverend by the
|
5
|
-
# policy.
|
6
|
-
class PolicyAwareSearchBuilder < Hydra::AccessControls::SearchBuilder
|
7
|
-
# Extends Blacklight::AccessControls::SearchBuilder.apply_gated_discovery
|
8
|
-
# to reflect policy-provided access.
|
9
|
-
# Appends the result of policy_clauses into the :fq
|
10
|
-
# @param [Hash] solr_parameters the current solr parameters, to be
|
11
|
-
# modified herein!
|
12
|
-
def apply_gated_discovery(solr_parameters)
|
13
|
-
super
|
14
|
-
logger.debug("POLICY-aware Solr parameters: #{solr_parameters.inspect}")
|
15
|
-
end
|
16
|
-
|
17
|
-
# @return [String,nil] solr query for finding all objects whose policies
|
18
|
-
# grant discover access to current_user
|
19
|
-
def policy_clauses
|
20
|
-
policy_ids = policies_with_access
|
21
|
-
return nil if policy_ids.empty?
|
22
|
-
clauses = policy_ids.map do |id|
|
23
|
-
ActiveFedora::SolrQueryBuilder
|
24
|
-
.construct_query_for_rel(isGovernedBy: id)
|
25
|
-
end
|
26
|
-
'(' + clauses.join(' OR '.freeze) + ')'
|
27
|
-
end
|
28
|
-
|
29
|
-
# Find all the policies that grant discover/read/edit permissions to this user or any of its groups.
|
30
|
-
# Grant access based on user id & group
|
31
|
-
def policies_with_access
|
32
|
-
#### TODO -- Memoize this and put it in the session?
|
33
|
-
user_access_filters = []
|
34
|
-
user_access_filters += apply_policy_group_permissions(discovery_permissions)
|
35
|
-
user_access_filters += apply_policy_user_permissions(discovery_permissions)
|
36
|
-
where = user_access_filters.join(' OR ')
|
37
|
-
result = policy_class.search_with_conditions(where,
|
38
|
-
fl: 'id',
|
39
|
-
rows: policy_class.count)
|
40
|
-
logger.debug "get policies: #{result}\n\n"
|
41
|
-
result.map { |h| h['id'] }
|
42
|
-
end
|
43
|
-
|
44
|
-
# for groups
|
45
|
-
# @param [Array{String,#to_sym}] permission_types symbols (or equivalent) from Hydra.config.permissions.inheritable
|
46
|
-
def apply_policy_group_permissions(permission_types = discovery_permissions)
|
47
|
-
user_access_filters = []
|
48
|
-
current_ability.user_groups.each do |group|
|
49
|
-
permission_types.each do |type|
|
50
|
-
user_access_filters << escape_filter(Hydra.config.permissions.inheritable[type.to_sym].group, group)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
user_access_filters
|
54
|
-
end
|
55
|
-
|
56
|
-
# for individual user access
|
57
|
-
# @param [Array{String,#to_sym}] permission_types
|
58
|
-
def apply_policy_user_permissions(permission_types = discovery_permissions)
|
59
|
-
user = current_ability.current_user
|
60
|
-
return [] unless user && user.user_key.present?
|
61
|
-
permission_types.map do |type|
|
62
|
-
escape_filter(Hydra.config.permissions.inheritable[type.to_sym].individual, user.user_key)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Override method from blacklight-access_controls
|
67
|
-
def discovery_permissions
|
68
|
-
@discovery_permissions ||= %w[edit discover read]
|
69
|
-
end
|
70
|
-
|
71
|
-
# Returns the Model used for AdminPolicy objects.
|
72
|
-
# You can set this by overriding this method or setting
|
73
|
-
# Hydra.config[:permissions][:policy_class]
|
74
|
-
# Defults to Hydra::AdminPolicy
|
75
|
-
def policy_class
|
76
|
-
Hydra.config.permissions.policy_class || Hydra::AdminPolicy
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
def gated_discovery_filters
|
82
|
-
filters = super
|
83
|
-
additional_clauses = policy_clauses
|
84
|
-
filters << additional_clauses unless additional_clauses.blank?
|
85
|
-
filters
|
86
|
-
end
|
87
|
-
|
88
|
-
# Find the name of the solr field for this type of permission.
|
89
|
-
# e.g. "read_access_group_ssim" or "discover_access_person_ssim".
|
90
|
-
# Used by blacklight-access_controls gem.
|
91
|
-
def solr_field_for(permission_type, permission_category)
|
92
|
-
permissions = Hydra.config.permissions[permission_type.to_sym]
|
93
|
-
permission_category == 'group' ? permissions.group : permissions.individual
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module Hydra
|
2
|
-
module AccessControls
|
3
|
-
class SearchBuilder < Blacklight::AccessControls::SearchBuilder
|
4
|
-
# Find the name of the solr field for this type of permission.
|
5
|
-
# e.g. "read_access_group_ssim" or "discover_access_person_ssim".
|
6
|
-
# Used by blacklight-access_controls.
|
7
|
-
def solr_field_for(permission_type, permission_category)
|
8
|
-
permissions = Hydra.config.permissions[permission_type.to_sym]
|
9
|
-
permission_category == 'group' ? permissions.group : permissions.individual
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|