hydra-access-controls 9.2.0.rc1 → 9.2.0
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 +11 -2
- data/spec/unit/permissions_spec.rb +77 -52
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 253a587f6be8c789190ce4652d72a76c96192c1b
|
4
|
+
data.tar.gz: b8b48f8969ffac5925ad5a1f80c0a82de1e92c9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48166e2c463853f451ca6526a160c50c458f9bcb7b0d18703c8f85db33a48160ebdd7e0a474b228c3d3304927892a82613474ddaa37d0eaa2c52288f74dbedd8
|
7
|
+
data.tar.gz: 1948d7ec0915657d4458ba332c751e554df761f72dbcd04320a1cb26c067e66ffd572b42b16c4e9e032a3b44eaed2da0cef38fcd40ce7a152c16dda813af1cff
|
@@ -392,9 +392,18 @@ module Hydra
|
|
392
392
|
def search_by_type_and_mode(type, mode)
|
393
393
|
case type
|
394
394
|
when :group
|
395
|
-
|
395
|
+
search_by_mode(mode) { |agent| group_agent?(agent) }
|
396
396
|
when :person
|
397
|
-
|
397
|
+
search_by_mode(mode) { |agent| person_agent?(agent) }
|
398
|
+
end
|
399
|
+
end
|
400
|
+
|
401
|
+
# @param [RDF::URI] mode One of the permissions modes, e.g. ACL.Write, ACL.Read, etc.
|
402
|
+
# @yieldparam [Array<ActiveFedora::Base>] agent the agent type assertions
|
403
|
+
# @return [Array<Permission>] list of permissions where the mode is as selected, the block evaluates to true and the target is not marked for delete
|
404
|
+
def search_by_mode(mode, &block)
|
405
|
+
permissions.to_a.select do |p|
|
406
|
+
yield(p.agent) && !p.marked_for_destruction? && p.mode.first.rdf_subject == mode
|
398
407
|
end
|
399
408
|
end
|
400
409
|
|
@@ -19,11 +19,11 @@ describe Hydra::AccessControls::Permissions do
|
|
19
19
|
subject.read_groups=['group1', 'group2']
|
20
20
|
subject.edit_users=['user1']
|
21
21
|
subject.read_users=['user2', 'user3']
|
22
|
-
expect(subject.permissions).to match_array [Hydra::AccessControls::Permission.new(:
|
23
|
-
Hydra::AccessControls::Permission.new({:
|
24
|
-
Hydra::AccessControls::Permission.new({:
|
25
|
-
Hydra::AccessControls::Permission.new({:
|
26
|
-
Hydra::AccessControls::Permission.new({:
|
22
|
+
expect(subject.permissions).to match_array [Hydra::AccessControls::Permission.new(type: "group", access: "read", name: "group1"),
|
23
|
+
Hydra::AccessControls::Permission.new({ type: "group", access: "read", name: "group2" }),
|
24
|
+
Hydra::AccessControls::Permission.new({ type: "person", access: "read", name: "user2" }),
|
25
|
+
Hydra::AccessControls::Permission.new({ type: "person", access: "read", name: "user3" }),
|
26
|
+
Hydra::AccessControls::Permission.new({ type: "person", access: "edit", name: "user1" })]
|
27
27
|
end
|
28
28
|
|
29
29
|
describe "building a new permission" do
|
@@ -40,33 +40,33 @@ describe Hydra::AccessControls::Permissions do
|
|
40
40
|
describe "with nested attributes" do
|
41
41
|
before do
|
42
42
|
subject.save!
|
43
|
-
subject.permissions_attributes = [{:
|
43
|
+
subject.permissions_attributes = [{ type: "person", access: "edit", name: "jcoyne" }]
|
44
44
|
end
|
45
45
|
context "when a hash is passed" do
|
46
46
|
before do
|
47
|
-
subject.permissions_attributes = {'0' => {type: "group", access:"read", name:"group1"},
|
48
|
-
'1' => {type: 'person', access: 'edit', name: 'user2'}}
|
47
|
+
subject.permissions_attributes = {'0' => { type: "group", access:"read", name:"group1" },
|
48
|
+
'1' => { type: 'person', access: 'edit', name: 'user2' }}
|
49
49
|
end
|
50
50
|
it "should handle a hash" do
|
51
51
|
expect(subject.permissions.size).to eq 3
|
52
52
|
expect(subject.permissions.to_a).to all(be_a(Hydra::AccessControls::Permission))
|
53
53
|
expect(subject.permissions.map(&:to_hash)).to match_array [
|
54
|
-
{type: "person", access: "edit", name: "jcoyne"},
|
55
|
-
{type: "group", access: "read", name: "group1"},
|
56
|
-
{type: "person", access: "edit", name: "user2"}]
|
54
|
+
{ type: "person", access: "edit", name: "jcoyne" },
|
55
|
+
{ type: "group", access: "read", name: "group1" },
|
56
|
+
{ type: "person", access: "edit", name: "user2" }]
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
it "
|
61
|
-
subject.permissions_attributes = [{type: "group", access: "read", name: "group1"}]
|
60
|
+
it "creates new group permissions" do
|
61
|
+
subject.permissions_attributes = [{ type: "group", access: "read", name: "group1" }]
|
62
62
|
expect(subject.permissions.size).to eq 2
|
63
63
|
expect(subject.permissions.to_a).to all(be_a(Hydra::AccessControls::Permission))
|
64
64
|
expect(subject.permissions[0].to_hash).to eq(type: "person", access: "edit", name: "jcoyne")
|
65
65
|
expect(subject.permissions[1].to_hash).to eq(type: "group", access: "read", name: "group1")
|
66
66
|
end
|
67
67
|
|
68
|
-
it "
|
69
|
-
subject.permissions_attributes = [{:
|
68
|
+
it "creates new user permissions" do
|
69
|
+
subject.permissions_attributes = [{ type: "person", access: "read", name: "user1" }]
|
70
70
|
expect(subject.permissions.size).to eq 2
|
71
71
|
expect(subject.permissions.to_a).to all(be_a(Hydra::AccessControls::Permission))
|
72
72
|
expect(subject.permissions[0].to_hash).to eq(type: "person", access: "edit", name: "jcoyne")
|
@@ -74,9 +74,9 @@ describe Hydra::AccessControls::Permissions do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
context "when called multiple times" do
|
77
|
-
it "
|
78
|
-
subject.permissions_attributes = [{:
|
79
|
-
subject.permissions_attributes = [{:
|
77
|
+
it "doesn't replace existing groups" do
|
78
|
+
subject.permissions_attributes = [{ type: "group", access: "read", name: "group1" }]
|
79
|
+
subject.permissions_attributes = [{ type: "group", access: "read", name: "group2" }]
|
80
80
|
expect(subject.permissions.size).to eq 3
|
81
81
|
expect(subject.permissions.to_a).to all(be_a(Hydra::AccessControls::Permission))
|
82
82
|
expect(subject.permissions[0].to_hash).to eq(type: "person", access: "edit", name: "jcoyne")
|
@@ -84,9 +84,9 @@ describe Hydra::AccessControls::Permissions do
|
|
84
84
|
expect(subject.permissions[2].to_hash).to eq(type: "group", access: "read", name: "group2")
|
85
85
|
end
|
86
86
|
|
87
|
-
it "
|
88
|
-
subject.permissions_attributes = [{:
|
89
|
-
subject.permissions_attributes = [{:
|
87
|
+
it "doesn't replace existing users" do
|
88
|
+
subject.permissions_attributes = [{ type: "person", access: "read", name: "user1" }]
|
89
|
+
subject.permissions_attributes = [{ type: "person", access: "read", name: "user2" }]
|
90
90
|
expect(subject.permissions.size).to eq 3
|
91
91
|
expect(subject.permissions.to_a).to all(be_a(Hydra::AccessControls::Permission))
|
92
92
|
expect(subject.permissions[0].to_hash).to eq(type: "person", access: "edit", name: "jcoyne")
|
@@ -94,49 +94,74 @@ describe Hydra::AccessControls::Permissions do
|
|
94
94
|
expect(subject.permissions[2].to_hash).to eq(type: "person", access: "read", name: "user2")
|
95
95
|
end
|
96
96
|
|
97
|
-
it "
|
98
|
-
subject.update permissions_attributes: [{:
|
99
|
-
subject.update permissions_attributes: [{:
|
97
|
+
it "updates permissions on existing users" do
|
98
|
+
subject.update permissions_attributes: [{ type: "person", access: "read", name: "user1" }]
|
99
|
+
subject.update permissions_attributes: [{ type: "person", access: "edit", name: "user1" }]
|
100
100
|
expect(subject.permissions.size).to eq 2
|
101
101
|
expect(subject.permissions.to_a).to all(be_a(Hydra::AccessControls::Permission))
|
102
102
|
expect(subject.permissions[0].to_hash).to eq(type: "person", access: "edit", name: "jcoyne")
|
103
103
|
expect(subject.permissions[1].to_hash).to eq(type: "person", access: "edit", name: "user1")
|
104
104
|
end
|
105
105
|
|
106
|
-
it "
|
107
|
-
subject.update permissions_attributes: [{:
|
108
|
-
subject.update permissions_attributes: [{:
|
106
|
+
it "updates permissions on existing groups" do
|
107
|
+
subject.update permissions_attributes: [{ type: "group", access: "read", name: "group1" }]
|
108
|
+
subject.update permissions_attributes: [{ type: "group", access: "edit", name: "group1" }]
|
109
109
|
expect(subject.permissions.map(&:to_hash)).to match_array [
|
110
|
-
{:
|
111
|
-
{:
|
110
|
+
{ type: "group", access: "edit", name: "group1" },
|
111
|
+
{ type: "person", access: "edit", name: "jcoyne" }]
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
115
|
+
context "when the destroy flag is set" do
|
116
|
+
let(:reloaded) { subject.permissions.reload.map(&:to_hash) }
|
117
|
+
let(:permissions_id) { ActiveFedora::Base.uri_to_id(subject.permissions.last.rdf_subject.to_s) }
|
118
|
+
|
119
|
+
context "to a truthy value" do
|
120
|
+
context "when updating users" do
|
121
|
+
before do
|
122
|
+
subject.update permissions_attributes: [{ type: "person", access: "read", name: "user1" }]
|
123
|
+
subject.update permissions_attributes: [{ id: permissions_id, type: "person", access: "edit", name: "user1", _destroy: true}]
|
124
|
+
end
|
125
|
+
|
126
|
+
it "removes permissions on existing users" do
|
127
|
+
indexed_result = ActiveFedora::SolrService.query("id:#{subject.id}").first['edit_access_person_ssim']
|
128
|
+
expect(indexed_result).to eq ['jcoyne']
|
129
|
+
expect(reloaded).to eq [{ name: "jcoyne", type: "person", access: "edit" }]
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
context "when updating groups" do
|
134
|
+
before do
|
135
|
+
subject.update permissions_attributes: [{ type: "group", access: "read", name: "group1" }]
|
136
|
+
subject.update permissions_attributes: [{ id: permissions_id, type: "group", access: "edit", name: "group1", _destroy: '1' }]
|
137
|
+
end
|
138
|
+
|
139
|
+
it "removes permissions on existing groups" do
|
140
|
+
#See what actually gets stored in solr
|
141
|
+
indexed_result = ActiveFedora::SolrService.query("id:#{subject.id}").first['edit_access_group_ssim']
|
142
|
+
expect(indexed_result).to be_nil
|
143
|
+
expect(reloaded).to eq [{ type: "person", access: "edit", name: "jcoyne" }]
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
120
147
|
|
121
|
-
|
122
|
-
subject.update permissions_attributes: [{:type=>"group", :access=>"read", :name=>"group1"}]
|
123
|
-
subject.update permissions_attributes: [{:id=>ActiveFedora::Base.uri_to_id(subject.permissions.last.rdf_subject.to_s), :type=>"group", :access=>"edit", :name=>"group1", _destroy: '1'}]
|
124
|
-
expect(subject.permissions.reload.map(&:to_hash)).to eq [{:type=>"person", :access=>"edit", :name=>"jcoyne"}]
|
125
|
-
end
|
148
|
+
context "to a falsy value" do
|
126
149
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
150
|
+
it "doesn't remove the record" do
|
151
|
+
subject.update permissions_attributes: [{ type: "group", access: "read", name: "group1" }]
|
152
|
+
subject.update permissions_attributes: [{ id: permissions_id, type: "group", access: "edit", name: "group1", _destroy: '0' }]
|
153
|
+
expect(reloaded).to match_array [{ type: "group", access: "edit", name: "group1" },
|
154
|
+
{ type: "person", access: "edit", name: "jcoyne" }]
|
155
|
+
end
|
156
|
+
end
|
132
157
|
end
|
133
158
|
end
|
134
159
|
|
135
160
|
describe "with the setter" do
|
136
161
|
before do
|
137
162
|
subject.permissions = [
|
138
|
-
Hydra::AccessControls::Permission.new(:
|
139
|
-
Hydra::AccessControls::Permission.new(:
|
163
|
+
Hydra::AccessControls::Permission.new(type: "group", access: "edit", name: "group1"),
|
164
|
+
Hydra::AccessControls::Permission.new(type: "person", access: "edit", name: "jcoyne")]
|
140
165
|
subject.save!
|
141
166
|
end
|
142
167
|
it "should set the permissions" do
|
@@ -177,12 +202,12 @@ describe Hydra::AccessControls::Permissions do
|
|
177
202
|
subject.set_read_groups(['group-2', 'group-3'], ['group-6'])
|
178
203
|
# 'group-7' is not eligible to be revoked
|
179
204
|
expect(subject.permissions.map(&:to_hash)).to match_array([
|
180
|
-
{name: 'group-2', type: 'group', access: 'read'},
|
181
|
-
{name: 'group-3', type: 'group', access: 'read'},
|
182
|
-
{name: 'group-7', type: 'group', access: 'read'},
|
183
|
-
{name: 'group-8', type: 'group', access: 'edit'},
|
184
|
-
{name: 'person1', type: 'person', access: 'read'},
|
185
|
-
{name: 'person2', type: 'person', access: 'discover'}])
|
205
|
+
{ name: 'group-2', type: 'group', access: 'read' },
|
206
|
+
{ name: 'group-3', type: 'group', access: 'read' },
|
207
|
+
{ name: 'group-7', type: 'group', access: 'read' },
|
208
|
+
{ name: 'group-8', type: 'group', access: 'edit' },
|
209
|
+
{ name: 'person1', type: 'person', access: 'read' },
|
210
|
+
{ name: 'person2', type: 'person', access: 'discover' }])
|
186
211
|
end
|
187
212
|
end
|
188
213
|
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: 9.2.0
|
4
|
+
version: 9.2.0
|
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: 2015-
|
13
|
+
date: 2015-07-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -213,9 +213,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
213
|
version: 1.9.3
|
214
214
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
215
215
|
requirements:
|
216
|
-
- - "
|
216
|
+
- - ">="
|
217
217
|
- !ruby/object:Gem::Version
|
218
|
-
version:
|
218
|
+
version: '0'
|
219
219
|
requirements: []
|
220
220
|
rubyforge_project:
|
221
221
|
rubygems_version: 2.4.8
|