protector 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/gemfiles/AR_3.2.gemfile.lock +1 -1
- data/gemfiles/AR_4.gemfile.lock +1 -1
- data/gemfiles/Rails_3.2.gemfile.lock +1 -1
- data/gemfiles/Rails_4.gemfile.lock +1 -1
- data/gemfiles/Sequel.gemfile.lock +1 -1
- data/lib/protector/adapters/active_record/base.rb +10 -7
- data/lib/protector/adapters/active_record/preloader.rb +1 -5
- data/lib/protector/adapters/active_record/relation.rb +2 -11
- data/lib/protector/adapters/sequel/dataset.rb +2 -10
- data/lib/protector/adapters/sequel/model.rb +10 -7
- data/lib/protector/dsl.rb +8 -7
- data/lib/protector/version.rb +1 -1
- data/spec/lib/dsl_spec.rb +19 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 823427ab7061d2b26ab6835d3c4bbfd17abe6430
|
4
|
+
data.tar.gz: dfa3edc7c59fca658f81ef6f1d377890a6ac9c1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4897c4ccea8d4b074158ba15b33395ec04522c067dc3a4c065366a6c8ceb81a1b9133c3862ed1625818c2f4d260107483f078277403b5375f09456d02f8e24d1
|
7
|
+
data.tar.gz: c9229df3995d7d6f71e0d71d638e6d1273ca165977badcdec63f643074a4598dbd370ae446c58cfa9f4df6bd418f7959c577cf19d1b1c7cd611764d062043557
|
data/gemfiles/AR_4.gemfile.lock
CHANGED
@@ -56,6 +56,15 @@ module Protector
|
|
56
56
|
end
|
57
57
|
|
58
58
|
module ClassMethods
|
59
|
+
# Storage of {Protector::DSL::Meta}
|
60
|
+
def protector_meta
|
61
|
+
@protector_meta ||= Protector::DSL::Meta.new(
|
62
|
+
Protector::Adapters::ActiveRecord,
|
63
|
+
self,
|
64
|
+
self.column_names
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
59
68
|
# Wraps every `.field` method with a check against {Protector::DSL::Meta::Box#readable?}
|
60
69
|
def define_method_attribute(name)
|
61
70
|
super
|
@@ -79,13 +88,7 @@ module Protector
|
|
79
88
|
|
80
89
|
# Storage for {Protector::DSL::Meta::Box}
|
81
90
|
def protector_meta(subject=protector_subject)
|
82
|
-
@protector_meta ||= self.class.protector_meta.evaluate(
|
83
|
-
Protector::Adapters::ActiveRecord,
|
84
|
-
self.class,
|
85
|
-
subject,
|
86
|
-
self.class.column_names,
|
87
|
-
self
|
88
|
-
)
|
91
|
+
@protector_meta ||= self.class.protector_meta.evaluate(subject, self)
|
89
92
|
end
|
90
93
|
|
91
94
|
# Checks if current model can be selected in the context of current subject
|
@@ -31,11 +31,7 @@ module Protector
|
|
31
31
|
def scope_with_protector(*args)
|
32
32
|
return scope_without_protector unless protector_subject?
|
33
33
|
|
34
|
-
@meta ||= klass.protector_meta.evaluate(
|
35
|
-
Protector::Adapters::ActiveRecord,
|
36
|
-
klass,
|
37
|
-
protector_subject
|
38
|
-
)
|
34
|
+
@meta ||= klass.protector_meta.evaluate(protector_subject)
|
39
35
|
|
40
36
|
scope_without_protector.merge(@meta.relation)
|
41
37
|
end
|
@@ -28,12 +28,7 @@ module Protector
|
|
28
28
|
|
29
29
|
# Gets {Protector::DSL::Meta::Box} of this relation
|
30
30
|
def protector_meta(subject=protector_subject)
|
31
|
-
|
32
|
-
@klass.protector_meta.evaluate(
|
33
|
-
Protector::Adapters::ActiveRecord,
|
34
|
-
@klass,
|
35
|
-
subject
|
36
|
-
)
|
31
|
+
@klass.protector_meta.evaluate(subject)
|
37
32
|
end
|
38
33
|
|
39
34
|
# @note Unscoped relation drops properties and therefore should be re-restricted
|
@@ -124,11 +119,7 @@ module Protector
|
|
124
119
|
# AR drops default_scope for eagerly loadable associations
|
125
120
|
# https://github.com/inossidabile/protector/issues/3
|
126
121
|
# and so should we
|
127
|
-
meta = klass.protector_meta.evaluate(
|
128
|
-
Protector::Adapters::ActiveRecord,
|
129
|
-
klass,
|
130
|
-
subject
|
131
|
-
)
|
122
|
+
meta = klass.protector_meta.evaluate(subject)
|
132
123
|
|
133
124
|
if meta.scoped?
|
134
125
|
unscoped = klass.unscoped
|
@@ -32,11 +32,7 @@ module Protector
|
|
32
32
|
|
33
33
|
# Gets {Protector::DSL::Meta::Box} of this dataset
|
34
34
|
def protector_meta(subject=protector_subject)
|
35
|
-
model.protector_meta.evaluate(
|
36
|
-
Protector::Adapters::Sequel,
|
37
|
-
model,
|
38
|
-
subject
|
39
|
-
)
|
35
|
+
model.protector_meta.evaluate(subject)
|
40
36
|
end
|
41
37
|
|
42
38
|
# Substitutes `row_proc` with {Protector} and injects protection scope
|
@@ -57,11 +53,7 @@ module Protector
|
|
57
53
|
@opts[:eager_graph][:reflections].each do |association, reflection|
|
58
54
|
model = reflection[:cache][:class] if reflection[:cache].is_a?(Hash) && reflection[:cache][:class]
|
59
55
|
model = reflection[:class_name].constantize unless model
|
60
|
-
meta = model.protector_meta.evaluate(
|
61
|
-
Protector::Adapters::Sequel,
|
62
|
-
model,
|
63
|
-
subject
|
64
|
-
)
|
56
|
+
meta = model.protector_meta.evaluate(subject)
|
65
57
|
|
66
58
|
relation = relation.instance_eval(&meta.scope_proc) if meta.scoped?
|
67
59
|
end
|
@@ -16,6 +16,15 @@ module Protector
|
|
16
16
|
end
|
17
17
|
|
18
18
|
module ClassMethods
|
19
|
+
# Storage of {Protector::DSL::Meta}
|
20
|
+
def protector_meta
|
21
|
+
@protector_meta ||= Protector::DSL::Meta.new(
|
22
|
+
Protector::Adapters::Sequel,
|
23
|
+
self,
|
24
|
+
self.columns
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
19
28
|
# Gets default restricted `Dataset`
|
20
29
|
def restrict!(*args)
|
21
30
|
dataset.clone.restrict! *args
|
@@ -24,13 +33,7 @@ module Protector
|
|
24
33
|
|
25
34
|
# Storage for {Protector::DSL::Meta::Box}
|
26
35
|
def protector_meta(subject=protector_subject)
|
27
|
-
@protector_meta ||= self.class.protector_meta.evaluate(
|
28
|
-
Protector::Adapters::Sequel,
|
29
|
-
self.class,
|
30
|
-
subject,
|
31
|
-
self.class.columns,
|
32
|
-
self
|
33
|
-
)
|
36
|
+
@protector_meta ||= self.class.protector_meta.evaluate(subject, self)
|
34
37
|
end
|
35
38
|
|
36
39
|
# Checks if current model can be selected in the context of current subject
|
data/lib/protector/dsl.rb
CHANGED
@@ -202,6 +202,12 @@ module Protector
|
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
205
|
+
def initialize(adapter, model, fields)
|
206
|
+
@adapter = adapter
|
207
|
+
@model = model
|
208
|
+
@fields = fields
|
209
|
+
end
|
210
|
+
|
205
211
|
# Storage for `protect` blocks
|
206
212
|
def blocks
|
207
213
|
@blocks ||= []
|
@@ -218,8 +224,8 @@ module Protector
|
|
218
224
|
# @param subject [Object] Restriction subject
|
219
225
|
# @param fields [Array<String>] All the fields the model has
|
220
226
|
# @param entry [Object] An instance of the model
|
221
|
-
def evaluate(
|
222
|
-
Box.new(adapter, model, fields, subject, entry, blocks)
|
227
|
+
def evaluate(subject, entry=nil)
|
228
|
+
Box.new(@adapter, @model, @fields, subject, entry, blocks)
|
223
229
|
end
|
224
230
|
end
|
225
231
|
|
@@ -269,11 +275,6 @@ module Protector
|
|
269
275
|
def protect(&block)
|
270
276
|
protector_meta << block
|
271
277
|
end
|
272
|
-
|
273
|
-
# Storage of {Protector::DSL::Meta}
|
274
|
-
def protector_meta
|
275
|
-
@protector_meta ||= Meta.new
|
276
|
-
end
|
277
278
|
end
|
278
279
|
end
|
279
280
|
end
|
data/lib/protector/version.rb
CHANGED
data/spec/lib/dsl_spec.rb
CHANGED
@@ -38,7 +38,13 @@ describe Protector::DSL do
|
|
38
38
|
|
39
39
|
describe Protector::DSL::Entry do
|
40
40
|
before :each do
|
41
|
-
@entry = Class.new
|
41
|
+
@entry = Class.new do
|
42
|
+
include Protector::DSL::Entry
|
43
|
+
|
44
|
+
def self.protector_meta
|
45
|
+
@protector_meta ||= Protector::DSL::Meta.new nil, nil, []
|
46
|
+
end
|
47
|
+
end
|
42
48
|
end
|
43
49
|
|
44
50
|
it "instantiates meta entity" do
|
@@ -55,8 +61,7 @@ describe Protector::DSL do
|
|
55
61
|
l = lambda {|x| x > 4 }
|
56
62
|
|
57
63
|
before :each do
|
58
|
-
@meta = Protector::DSL::Meta.new
|
59
|
-
|
64
|
+
@meta = Protector::DSL::Meta.new nil, nil, %w(field1 field2 field3 field4 field5)
|
60
65
|
@meta << lambda {
|
61
66
|
can :view
|
62
67
|
}
|
@@ -84,30 +89,30 @@ describe Protector::DSL do
|
|
84
89
|
end
|
85
90
|
|
86
91
|
it "evaluates" do
|
87
|
-
@meta.evaluate(
|
92
|
+
@meta.evaluate('user', 'entry')
|
88
93
|
end
|
89
94
|
|
90
95
|
context "adequate", paranoid: false do
|
91
96
|
it "sets scoped?" do
|
92
|
-
data = @meta.evaluate(nil,
|
97
|
+
data = @meta.evaluate(nil, 'entry')
|
93
98
|
data.scoped?.should == false
|
94
99
|
end
|
95
100
|
end
|
96
101
|
|
97
102
|
context "paranoid", paranoid: true do
|
98
103
|
it "sets scoped?" do
|
99
|
-
data = @meta.evaluate(nil,
|
104
|
+
data = @meta.evaluate(nil, 'entry')
|
100
105
|
data.scoped?.should == true
|
101
106
|
end
|
102
107
|
end
|
103
108
|
|
104
109
|
it "sets relation" do
|
105
|
-
data = @meta.evaluate(
|
110
|
+
data = @meta.evaluate('user', 'entry')
|
106
111
|
data.relation.should == 'relation'
|
107
112
|
end
|
108
113
|
|
109
114
|
it "sets access" do
|
110
|
-
data = @meta.evaluate(
|
115
|
+
data = @meta.evaluate('user', 'entry')
|
111
116
|
data.access.should == {
|
112
117
|
update: {
|
113
118
|
"field1" => nil,
|
@@ -126,24 +131,24 @@ describe Protector::DSL do
|
|
126
131
|
end
|
127
132
|
|
128
133
|
it "marks destroyable" do
|
129
|
-
data = @meta.evaluate(
|
134
|
+
data = @meta.evaluate('user', 'entry')
|
130
135
|
data.destroyable?.should == true
|
131
136
|
end
|
132
137
|
|
133
138
|
it "marks updatable" do
|
134
|
-
data = @meta.evaluate(
|
139
|
+
data = @meta.evaluate('user', 'entry')
|
135
140
|
data.updatable?.should == true
|
136
141
|
end
|
137
142
|
|
138
143
|
it "marks creatable" do
|
139
|
-
data = @meta.evaluate(
|
144
|
+
data = @meta.evaluate('user', 'entry')
|
140
145
|
data.creatable?.should == false
|
141
146
|
end
|
142
147
|
end
|
143
148
|
|
144
149
|
context "custom methods" do
|
145
150
|
before :each do
|
146
|
-
@meta = Protector::DSL::Meta.new
|
151
|
+
@meta = Protector::DSL::Meta.new nil, nil, %w(field1 field2)
|
147
152
|
|
148
153
|
@meta << lambda {
|
149
154
|
can :drink, :field1
|
@@ -153,13 +158,13 @@ describe Protector::DSL do
|
|
153
158
|
end
|
154
159
|
|
155
160
|
it "sets field-level restriction" do
|
156
|
-
box = @meta.evaluate(
|
161
|
+
box = @meta.evaluate('user', 'entry')
|
157
162
|
box.can?(:drink, :field1).should == true
|
158
163
|
box.can?(:drink).should == true
|
159
164
|
end
|
160
165
|
|
161
166
|
it "sets field-level protection" do
|
162
|
-
box = @meta.evaluate(
|
167
|
+
box = @meta.evaluate('user', 'entry')
|
163
168
|
box.can?(:eat, :field1).should == false
|
164
169
|
box.can?(:eat).should == true
|
165
170
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boris Staal
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|