lockdown 2.0.4 → 2.0.5
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.
- data/lib/lockdown/configuration.rb +13 -5
- data/lib/lockdown/delivery.rb +4 -8
- data/lib/lockdown.rb +1 -1
- data/lockdown.gemspec +2 -2
- data/test/lockdown/test_configuration.rb +12 -1
- data/test/lockdown/test_delivery.rb +6 -6
- metadata +3 -3
@@ -49,6 +49,9 @@ module Lockdown
|
|
49
49
|
# Which environments Lockdown should not sync with db
|
50
50
|
# Default ['test']
|
51
51
|
attr_accessor :skip_db_sync_in
|
52
|
+
# Slice size for permission regexes
|
53
|
+
# Default 10
|
54
|
+
attr_accessor :permission_slice_size
|
52
55
|
# Set defaults.
|
53
56
|
def reset
|
54
57
|
@configured = false
|
@@ -70,6 +73,7 @@ module Lockdown
|
|
70
73
|
@user_model = "User"
|
71
74
|
|
72
75
|
@skip_db_sync_in = ['test']
|
76
|
+
@permission_slice_size = 10
|
73
77
|
end
|
74
78
|
|
75
79
|
# @return [String] concatentation of public_access + "|" + protected_access
|
@@ -182,17 +186,21 @@ module Lockdown
|
|
182
186
|
end
|
183
187
|
end
|
184
188
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
+
slice_permission_regexes(authenticated_access, access_rights_for_permissions(*permission_names))
|
190
|
+
end
|
191
|
+
|
192
|
+
def slice_permission_regexes(authenticated_access, permissions)
|
193
|
+
result = [authenticated_access]
|
194
|
+
permissions.each_slice(permission_slice_size) do |permission_slice|
|
195
|
+
result << permission_slice.join('|')
|
189
196
|
end
|
197
|
+
result
|
190
198
|
end
|
191
199
|
|
192
200
|
# @param [Array(String)] names permission names
|
193
201
|
# @return [String] combination of regex_patterns from permissions
|
194
202
|
def access_rights_for_permissions(*names)
|
195
|
-
names.collect{|name| "(#{permission(name).regex_pattern})"}
|
203
|
+
names.collect{|name| "(#{permission(name).regex_pattern})"}
|
196
204
|
end
|
197
205
|
|
198
206
|
def skip_sync?
|
data/lib/lockdown/delivery.rb
CHANGED
@@ -10,18 +10,14 @@ module Lockdown
|
|
10
10
|
rescue NameError
|
11
11
|
end
|
12
12
|
|
13
|
-
access_rights ||= Lockdown::Configuration.public_access
|
14
|
-
|
15
|
-
access_rights_regex = Lockdown.regex(access_rights)
|
16
|
-
|
17
13
|
path += "/" unless path =~ /\/$/
|
18
14
|
path = "/" + path unless path =~ /^\//
|
19
15
|
|
20
|
-
|
21
|
-
return true
|
22
|
-
end
|
16
|
+
access_rights ||= [Lockdown::Configuration.public_access]
|
23
17
|
|
24
|
-
return
|
18
|
+
return access_rights.any? do |access_rights_group|
|
19
|
+
(Lockdown.regex(access_rights_group) =~ path) == 0
|
20
|
+
end
|
25
21
|
end
|
26
22
|
end # class block
|
27
23
|
end # Delivery
|
data/lib/lockdown.rb
CHANGED
data/lockdown.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{lockdown}
|
8
|
-
s.version = "2.0.
|
8
|
+
s.version = "2.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andrew Stone"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-24}
|
13
13
|
s.description = %q{Restrict access to your controller actions. }
|
14
14
|
s.email = %q{andy@stonean.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -184,10 +184,21 @@ class TestLockdownConfiguration < MiniTest::Unit::TestCase
|
|
184
184
|
Authorization.permission('faq')
|
185
185
|
Authorization.permission('about')
|
186
186
|
|
187
|
-
assert_equal "((/home(/.*)?))
|
187
|
+
assert_equal ["((/home(/.*)?))","((/faq(/.*)?))","((/about(/.*)?))"],
|
188
188
|
@config.access_rights_for_permissions('home', 'faq', 'about')
|
189
189
|
end
|
190
190
|
|
191
|
+
def test_permission_regex_slicing
|
192
|
+
@config.permission_slice_size = 2
|
193
|
+
|
194
|
+
Authorization.permission('home')
|
195
|
+
Authorization.permission('faq')
|
196
|
+
Authorization.permission('about')
|
197
|
+
|
198
|
+
assert_equal ["x","((/home(/.*)?))|((/faq(/.*)?))","((/about(/.*)?))"],
|
199
|
+
@config.slice_permission_regexes('x', @config.access_rights_for_permissions('home', 'faq', 'about'))
|
200
|
+
end
|
201
|
+
|
191
202
|
def test_skip_sync?
|
192
203
|
assert_equal true, @config.skip_sync?
|
193
204
|
end
|
@@ -185,8 +185,8 @@ class TestLockdown < MiniTest::Unit::TestCase
|
|
185
185
|
|
186
186
|
assert_equal false, Lockdown::Delivery.allowed?('/users/')
|
187
187
|
|
188
|
-
assert_equal false, Lockdown::Delivery.allowed?('/users/', Lockdown::Configuration.authenticated_access)
|
189
|
-
assert_equal false, Lockdown::Delivery.allowed?('/users', Lockdown::Configuration.authenticated_access)
|
188
|
+
assert_equal false, Lockdown::Delivery.allowed?('/users/', [Lockdown::Configuration.authenticated_access])
|
189
|
+
assert_equal false, Lockdown::Delivery.allowed?('/users', [Lockdown::Configuration.authenticated_access])
|
190
190
|
end
|
191
191
|
|
192
192
|
def test_it_handles_namespaced_routes_correctly
|
@@ -203,8 +203,8 @@ class TestLockdown < MiniTest::Unit::TestCase
|
|
203
203
|
|
204
204
|
assert_equal false, Lockdown::Delivery.allowed?('/nested/users')
|
205
205
|
|
206
|
-
assert_equal true, Lockdown::Delivery.allowed?('/users', Lockdown::Configuration.authenticated_access)
|
207
|
-
assert_equal true, Lockdown::Delivery.allowed?('/nested/users', Lockdown::Configuration.authenticated_access)
|
206
|
+
assert_equal true, Lockdown::Delivery.allowed?('/users', [Lockdown::Configuration.authenticated_access])
|
207
|
+
assert_equal true, Lockdown::Delivery.allowed?('/nested/users', [Lockdown::Configuration.authenticated_access])
|
208
208
|
end
|
209
209
|
|
210
210
|
def test_it_matches_exact_paths_only
|
@@ -218,7 +218,7 @@ class TestLockdown < MiniTest::Unit::TestCase
|
|
218
218
|
|
219
219
|
assert_equal false, Lockdown::Delivery.allowed?('/users_that_should_be_protected')
|
220
220
|
|
221
|
-
assert_equal true, Lockdown::Delivery.allowed?('/users', Lockdown::Configuration.authenticated_access)
|
222
|
-
assert_equal true, Lockdown::Delivery.allowed?('/users_that_should_be_protected', Lockdown::Configuration.authenticated_access)
|
221
|
+
assert_equal true, Lockdown::Delivery.allowed?('/users', [Lockdown::Configuration.authenticated_access])
|
222
|
+
assert_equal true, Lockdown::Delivery.allowed?('/users_that_should_be_protected', [Lockdown::Configuration.authenticated_access])
|
223
223
|
end
|
224
224
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 2
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 2.0.
|
8
|
+
- 5
|
9
|
+
version: 2.0.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Andrew Stone
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-10-
|
17
|
+
date: 2010-10-24 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|