lockdown 1.3.0 → 1.3.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.
@@ -1,11 +1,23 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
 
3
+ require File.join("lockdown", "errors")
4
+
3
5
  require File.join("lockdown", "helper")
6
+ require File.join("lockdown", "session")
7
+ require File.join("lockdown", "context")
8
+ require File.join("lockdown", "permission")
9
+ require File.join("lockdown", "database")
10
+ require File.join("lockdown", "rules")
11
+ require File.join("lockdown", "system")
12
+
13
+ require File.join("lockdown", "references")
4
14
 
5
15
  module Lockdown
16
+ extend Lockdown::References
6
17
  extend Lockdown::Helper
7
18
 
8
- VERSION = '1.3.0'
19
+ # current version is 1.3.0
20
+ VERSION = '1.3.1'
9
21
 
10
22
  # Returns the version string for the library.
11
23
  def self.version
@@ -59,14 +71,7 @@ module Lockdown
59
71
  end # mixin_resource?
60
72
  end # Lockdown
61
73
 
62
- require File.join("lockdown", "session")
63
- require File.join("lockdown", "context")
64
- require File.join("lockdown", "permission")
65
- require File.join("lockdown", "database")
66
- require File.join("lockdown", "rules")
67
- require File.join("lockdown", "system")
68
-
69
74
  puts "=> Mixing in Lockdown version: #{Lockdown.version} \n"
70
-
71
75
  Lockdown.mixin
72
76
 
77
+
@@ -0,0 +1,7 @@
1
+ module Lockdown
2
+ class InvalidRuleAssignment < StandardError; end
3
+
4
+ class InvalidRuleContext < StandardError; end
5
+
6
+ class PermissionScopeCollision < StandardError; end
7
+ end
@@ -21,7 +21,7 @@ module Lockdown
21
21
  include Lockdown::Frameworks::Rails::View
22
22
  end
23
23
 
24
- Lockdown::System.class_eval do
24
+ Lockdown.system.class_eval do
25
25
  extend Lockdown::Frameworks::Rails::System
26
26
  end
27
27
  end
@@ -45,7 +45,7 @@ module Lockdown
45
45
 
46
46
  klass.filter_parameter_logging :password, :password_confirmation
47
47
 
48
- klass.rescue_from SecurityError, :with => proc{|e| access_denied(e)}
48
+ klass.rescue_from SecurityError, :with => proc{|e| ld_access_denied(e)}
49
49
  end
50
50
  end # class block
51
51
 
@@ -101,7 +101,7 @@ module Lockdown
101
101
  include Lockdown::Frameworks::Rails::Controller
102
102
 
103
103
  def skip_sync?
104
- Lockdown::System.fetch(:skip_db_sync_in).include?(framework_environment)
104
+ Lockdown.system.fetch(:skip_db_sync_in).include?(framework_environment)
105
105
  end
106
106
 
107
107
  def framework_environment
@@ -92,7 +92,7 @@ module Lockdown
92
92
  return remote_url?(url_parts[2])
93
93
  end
94
94
 
95
- def access_denied(e)
95
+ def ld_access_denied(e)
96
96
 
97
97
  RAILS_DEFAULT_LOGGER.info "Access denied: #{e}"
98
98
 
@@ -41,11 +41,11 @@ module Lockdown
41
41
  end
42
42
 
43
43
  def user_group_model_string
44
- Lockdown::System.fetch(:user_group_model) || "UserGroup"
44
+ Lockdown.system.fetch(:user_group_model) || "UserGroup"
45
45
  end
46
46
 
47
47
  def user_model_string
48
- Lockdown::System.fetch(:user_model) || "User"
48
+ Lockdown.system.fetch(:user_model) || "User"
49
49
  end
50
50
 
51
51
  def get_string(value)
@@ -1,7 +1,4 @@
1
1
  module Lockdown
2
- class InvalidRuleContext < StandardError; end
3
- class PermissionScopeCollision < StandardError; end
4
-
5
2
  class Controller
6
3
  attr_accessor :name, :access_methods, :only_methods, :except_methods
7
4
 
@@ -178,14 +175,14 @@ module Lockdown
178
175
 
179
176
  def set_as_public_access
180
177
  if protected_access?
181
- raise PermissionScopeCollision, "Permission: #{name} already marked as protected and trying to set as public."
178
+ raise Lockdown::PermissionScopeCollision, "Permission: #{name} already marked as protected and trying to set as public."
182
179
  end
183
180
  @public_access = true
184
181
  end
185
182
 
186
183
  def set_as_protected_access
187
184
  if public_access?
188
- raise PermissionScopeCollision, "Permission: #{name} already marked as public and trying to set as protected."
185
+ raise Lockdown::PermissionScopeCollision, "Permission: #{name} already marked as public and trying to set as protected."
189
186
  end
190
187
  @protected_access = true
191
188
  end
@@ -218,7 +215,7 @@ module Lockdown
218
215
  method_trace = caller.first;
219
216
  calling_method = caller.first[/#{__FILE__}:(\d+):in `(.*)'/,2]
220
217
  unless current_context.allows?(calling_method)
221
- raise InvalidRuleContext, "Method: #{calling_method} was called on wrong context #{current_context}. Allowed methods are: #{current_context.allowed_methods.join(',')}."
218
+ raise Lockdown::InvalidRuleContext, "Method: #{calling_method} was called on wrong context #{current_context}. Allowed methods are: #{current_context.allowed_methods.join(',')}."
222
219
  end
223
220
  end
224
221
  end
@@ -0,0 +1,19 @@
1
+ module Lockdown
2
+ module References
3
+ def helper
4
+ Lockdown::Helper
5
+ end
6
+
7
+ def rules
8
+ Lockdown::Rules
9
+ end
10
+
11
+ def session
12
+ Lockdown::Session
13
+ end
14
+
15
+ def system
16
+ Lockdown::System
17
+ end
18
+ end
19
+ end
@@ -9,11 +9,23 @@ module Lockdown
9
9
  user_group_symbols.each do |ugs|
10
10
  access_rights << Lockdown::System.access_rights_for_user_group(ugs)
11
11
  end
12
+ login_user
12
13
  controller.session[:access_rights] = access_rights.flatten
13
14
  end
14
15
 
15
16
  alias login_with_group login_with_groups
16
17
 
18
+ def login_with_permissions(*permissions_symbols)
19
+ access_rights = Lockdown::System.standard_authorized_user_rights
20
+ permissions_symbols.each do |ps|
21
+ access_rights << Lockdown::System.access_rights_for_permission(ps)
22
+ end
23
+ login_user
24
+ controller.session[:access_rights] = access_rights.flatten.uniq
25
+ end
26
+
27
+ alias login_with_permission login_with_permissions
28
+
17
29
  def login_standard
18
30
  login_user
19
31
  end
@@ -1,6 +1,4 @@
1
1
  module Lockdown
2
- class InvalidRuleAssignment < StandardError; end
3
-
4
2
  module Rules
5
3
  attr_accessor :options
6
4
  attr_accessor :permissions
@@ -58,7 +56,7 @@ module Lockdown
58
56
  perm.set_as_public_access
59
57
  else
60
58
  msg = "Permission not found: #{perm_symbol}"
61
- raise InvalidRuleAssigment, msg
59
+ raise Lockdown::InvalidRuleAssignment, msg
62
60
  end
63
61
  end
64
62
  end
@@ -75,7 +73,7 @@ module Lockdown
75
73
  perm.set_as_protected_access
76
74
  else
77
75
  msg = "Permission not found: #{perm_symbol}"
78
- raise InvalidRuleAssigment, msg
76
+ raise Lockdown::InvalidRuleAssignment, msg
79
77
  end
80
78
  end
81
79
  end
@@ -290,7 +288,7 @@ module Lockdown
290
288
  perms.each do |perm|
291
289
  unless permission_exists?(perm)
292
290
  msg ="User Group: #{user_group}, permission not found: #{perm}"
293
- raise InvalidRuleAssignment, msg
291
+ raise Lockdown::InvalidRuleAssignment, msg
294
292
  end
295
293
  end
296
294
  end
@@ -23,29 +23,57 @@ describe Lockdown::Frameworks::Rails do
23
23
 
24
24
  describe "#mixin" do
25
25
  it "should perform class_eval on controller view and system to inject itself" do
26
- module ActionController; class Base; end end
27
- module ActionView; class Base; end end
28
26
 
29
- Lockdown.stub!(:controller_parent).and_return(ActionController::Base)
30
- Lockdown.stub!(:view_helper).and_return(ActionView::Base)
27
+ @view_helper = Mikey
28
+ @view_helper.should_receive(:include).
29
+ with( Lockdown::Frameworks::Rails::View )
31
30
 
32
- ActionView::Base.should_receive(:class_eval)
31
+ Lockdown.should_receive(:view_helper) do
32
+ @view_helper
33
+ end
33
34
 
34
- ActionController::Base.should_receive(:helper_method)
35
- ActionController::Base.should_receive(:before_filter)
36
- ActionController::Base.should_receive(:filter_parameter_logging)
37
- ActionController::Base.should_receive(:rescue_from)
35
+ @system = Mikey
36
+ @system.should_receive(:extend).
37
+ with( Lockdown::Frameworks::Rails::System )
38
38
 
39
- ActionController::Base.should_receive(:class_eval)
40
- ActionController::Base.should_receive(:hide_action)
41
-
42
- Lockdown::System.should_receive(:class_eval)
39
+ Lockdown.should_receive(:system) do
40
+ @system
41
+ end
43
42
 
43
+ @rails.should_receive(:mixin_controller)
44
44
 
45
45
  @rails.mixin
46
46
  end
47
47
 
48
48
  end
49
+
50
+ describe "#mixin_controller" do
51
+
52
+ it "should inject itself" do
53
+ klass = Mikey
54
+
55
+ klass.should_receive(:include).
56
+ with(Lockdown::Session)
57
+
58
+ klass.should_receive(:include).
59
+ with(Lockdown::Frameworks::Rails::Controller::Lock)
60
+
61
+ klass.should_receive(:helper_method).with(:authorized?)
62
+
63
+ klass.should_receive(:hide_action).with(:set_current_user, :configure_lockdown, :check_request_authorization, :check_model_authorization)
64
+
65
+ klass.should_receive(:before_filter).and_return do |c|
66
+ #not working yet. very frustrating trying to test this
67
+ end
68
+
69
+ klass.should_receive(:filter_parameter_logging)
70
+
71
+ klass.should_receive(:rescue_from)
72
+
73
+ @rails.mixin_controller(klass)
74
+ end
75
+ end
76
+
49
77
  end
50
78
 
51
79
  RAILS_ROOT = "/shibby/dibby/do"
@@ -15,13 +15,6 @@ describe Lockdown::Rules do
15
15
  end
16
16
  end
17
17
 
18
- describe "#set_public_access" do
19
- it "should define the permission as public" do
20
- @rules.set_permission(:user_management)
21
- @rules.set_public_access(:user_management)
22
- end
23
- end
24
-
25
18
  describe "#set_public_access" do
26
19
  it "should define the permission as public" do
27
20
  @rules.set_permission(:home_page)
@@ -31,9 +24,11 @@ describe Lockdown::Rules do
31
24
  end
32
25
 
33
26
  it "should raise and InvalidRuleAssignment if permission does not exist" do
34
- msg = "Permission not found: user_management"
35
- lambda{@rules.set_public_access(:toy_management)}.should
36
- raise_error(Lockdown::InvalidRuleAssignment, msg)
27
+ msg = "Permission not found: toy_management"
28
+
29
+ @rules.should_receive(:raise).with(Lockdown::InvalidRuleAssignment, msg)
30
+
31
+ @rules.set_public_access(:toy_management)
37
32
  end
38
33
  end
39
34
 
@@ -61,8 +56,10 @@ describe Lockdown::Rules do
61
56
 
62
57
  it "should raise and InvalidRuleAssignment if permission does not exist" do
63
58
  msg = "Permission not found: user_management"
64
- lambda{@rules.set_protected_access(:user_management)}.should
65
- raise_error(Lockdown::InvalidRuleAssignment, msg)
59
+
60
+ @rules.should_receive(:raise).with(Lockdown::InvalidRuleAssignment, msg)
61
+
62
+ @rules.set_protected_access(:user_management)
66
63
  end
67
64
  end
68
65
 
@@ -144,8 +141,94 @@ describe Lockdown::Rules do
144
141
  end
145
142
  end
146
143
 
147
-
148
144
  describe "#make_user_administrator" do
145
+ it "should add admin to user groups" do
146
+ ugc = mock('user_group_class',:find_or_create_by_name => :admin)
147
+ Lockdown.should_receive(:user_group_class).and_return(ugc)
148
+
149
+ usr = mock('user', :user_groups => [])
150
+
151
+ @rules.make_user_administrator(usr).should include(:admin)
152
+ end
153
+ end
154
+
155
+ describe "#access_rights_for_user" do
156
+ it "should array of rights for user who is not an admin" do
157
+ @rules.should_receive(:administrator?).and_return(false)
158
+
159
+ @rules.set_permission(:register_account).
160
+ with_controller(:users).
161
+ only_methods(:new, :create)
162
+
163
+ @rules.set_public_access(:register_account)
164
+
165
+ perm = @rules.set_permission(:perm_one).
166
+ with_controller("a_controller").
167
+ only_methods("show","edit","update")
168
+
169
+ ug = @rules.set_user_group(:ug_one, :perm_one)
170
+
171
+ @rules.should_receive(:set_model_access)
172
+ @rules.process_rules
173
+
174
+ usr = mock('user', :user_groups => [:ug_one])
175
+
176
+ @rules.access_rights_for_user(usr).
177
+ should == ["users/new", "users/create", "a_controller/show", "a_controller/edit", "a_controller/update"]
178
+ end
179
+ end
180
+
181
+ describe "#access_rights_for_user_group" do
182
+ it "should return array of rights for user_group" do
183
+ perm = @rules.set_permission(:perm_one).
184
+ with_controller("a_controller").
185
+ only_methods("show","edit","update")
186
+
187
+ ug = @rules.set_user_group(:ug_one, :perm_one)
188
+
189
+ @rules.should_receive(:set_model_access)
190
+ @rules.process_rules
191
+
192
+ @rules.access_rights_for_user_group(:ug_one).
193
+ should == ["a_controller/show", "a_controller/edit", "a_controller/update"]
194
+ end
195
+ end
196
+
197
+ describe "#access_rights_for_permission" do
198
+ it "should return array of rights for permission" do
199
+
200
+ perm = @rules.set_permission(:perm_one).
201
+ with_controller("a_controller").
202
+ only_methods("show","edit","update")
203
+
204
+ @rules.should_receive(:set_model_access)
205
+ @rules.process_rules
206
+
207
+ @rules.access_rights_for_permission(perm).
208
+ should == ["a_controller/show", "a_controller/edit", "a_controller/update"]
209
+ end
210
+ end
211
+
212
+ describe "#standard_authorized_user_rights" do
213
+ it "should receive public_access + protected_access" do
214
+ @rules.set_permission(:register_account).
215
+ with_controller(:users).
216
+ only_methods(:new, :create)
217
+
218
+ @rules.set_permission(:my_profile).
219
+ with_controller(:users).
220
+ only_methods(:show, :edit, :update)
221
+
222
+
223
+ @rules.set_public_access(:register_account)
224
+ @rules.set_protected_access(:my_profile)
225
+
226
+ @rules.should_receive(:set_model_access)
227
+ @rules.process_rules
228
+
229
+ @rules.standard_authorized_user_rights.
230
+ should == ["users/new", "users/create", "users/show", "users/edit", "users/update"]
231
+ end
149
232
  end
150
233
 
151
234
  describe "#process_rules" do
@@ -77,9 +77,9 @@ describe Lockdown::Session do
77
77
  it "should set the access_rights from the user list" do
78
78
  array = ["posts/index", "posts/show"]
79
79
  Lockdown::System.stub!(:access_rights_for_user).and_return(array)
80
- usr = mock(:id => 1234)
81
- @controller.stub!(:current_user).and_return(usr)
82
- @controller.send(:add_lockdown_session_values)
80
+ usr = mock('user')
81
+ usr.should_receive(:id).and_return(1234)
82
+ @controller.send(:add_lockdown_session_values, usr)
83
83
  @session[:access_rights].should == array
84
84
  end
85
85
  end
@@ -1 +1,8 @@
1
1
  require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib lockdown]))
2
+
3
+ class Mikey
4
+ def method_missing(method, *args)
5
+ true
6
+ end
7
+ end
8
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lockdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Stone
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-18 00:00:00 -04:00
12
+ date: 2009-09-02 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -38,12 +38,14 @@ files:
38
38
  - lib/lockdown.rb
39
39
  - lib/lockdown/context.rb
40
40
  - lib/lockdown/database.rb
41
+ - lib/lockdown/errors.rb
41
42
  - lib/lockdown/frameworks/rails.rb
42
43
  - lib/lockdown/frameworks/rails/controller.rb
43
44
  - lib/lockdown/frameworks/rails/view.rb
44
45
  - lib/lockdown/helper.rb
45
46
  - lib/lockdown/orms/active_record.rb
46
47
  - lib/lockdown/permission.rb
48
+ - lib/lockdown/references.rb
47
49
  - lib/lockdown/rspec_helper.rb
48
50
  - lib/lockdown/rules.rb
49
51
  - lib/lockdown/session.rb