revo-lockdown 1.6.2.2 → 1.7.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.
Files changed (46) hide show
  1. data/lib/lockdown/frameworks/rails/controller.rb +23 -8
  2. data/lib/lockdown/frameworks/rails.rb +1 -1
  3. data/lib/lockdown/rules.rb +4 -4
  4. data/lib/lockdown/session.rb +1 -25
  5. data/lib/lockdown/system.rb +1 -1
  6. data/lib/lockdown.rb +4 -5
  7. data/revo-lockdown.gemspec +83 -0
  8. data/spec/lockdown/frameworks/rails/controller_spec.rb +8 -1
  9. data/spec/lockdown/rspec_helper_spec.rb +4 -3
  10. data/spec/lockdown/session_spec.rb +0 -64
  11. data/spec/lockdown/system_spec.rb +0 -2
  12. metadata +6 -40
  13. data/lib/lockdown/database.rb +0 -127
  14. data/lib/lockdown/orms/active_record.rb +0 -68
  15. data/rails_generators/lockdown/lockdown_generator.rb +0 -274
  16. data/rails_generators/lockdown/templates/app/controllers/permissions_controller.rb +0 -22
  17. data/rails_generators/lockdown/templates/app/controllers/sessions_controller.rb +0 -39
  18. data/rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb +0 -122
  19. data/rails_generators/lockdown/templates/app/controllers/users_controller.rb +0 -117
  20. data/rails_generators/lockdown/templates/app/helpers/permissions_helper.rb +0 -2
  21. data/rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb +0 -2
  22. data/rails_generators/lockdown/templates/app/helpers/users_helper.rb +0 -2
  23. data/rails_generators/lockdown/templates/app/models/permission.rb +0 -13
  24. data/rails_generators/lockdown/templates/app/models/profile.rb +0 -10
  25. data/rails_generators/lockdown/templates/app/models/user.rb +0 -95
  26. data/rails_generators/lockdown/templates/app/models/user_group.rb +0 -15
  27. data/rails_generators/lockdown/templates/app/views/permissions/index.html.erb +0 -16
  28. data/rails_generators/lockdown/templates/app/views/permissions/show.html.erb +0 -26
  29. data/rails_generators/lockdown/templates/app/views/sessions/new.html.erb +0 -12
  30. data/rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb +0 -33
  31. data/rails_generators/lockdown/templates/app/views/user_groups/index.html.erb +0 -20
  32. data/rails_generators/lockdown/templates/app/views/user_groups/new.html.erb +0 -31
  33. data/rails_generators/lockdown/templates/app/views/user_groups/show.html.erb +0 -29
  34. data/rails_generators/lockdown/templates/app/views/users/edit.html.erb +0 -51
  35. data/rails_generators/lockdown/templates/app/views/users/index.html.erb +0 -22
  36. data/rails_generators/lockdown/templates/app/views/users/new.html.erb +0 -50
  37. data/rails_generators/lockdown/templates/app/views/users/show.html.erb +0 -33
  38. data/rails_generators/lockdown/templates/config/initializers/lockit.rb +0 -1
  39. data/rails_generators/lockdown/templates/db/migrate/create_admin_user.rb +0 -17
  40. data/rails_generators/lockdown/templates/db/migrate/create_permissions.rb +0 -19
  41. data/rails_generators/lockdown/templates/db/migrate/create_profiles.rb +0 -26
  42. data/rails_generators/lockdown/templates/db/migrate/create_user_groups.rb +0 -19
  43. data/rails_generators/lockdown/templates/db/migrate/create_users.rb +0 -17
  44. data/rails_generators/lockdown/templates/lib/lockdown/README +0 -42
  45. data/rails_generators/lockdown/templates/lib/lockdown/init.rb +0 -136
  46. data/spec/lockdown/database_spec.rb +0 -162
@@ -32,15 +32,30 @@ module Lockdown
32
32
 
33
33
  def check_request_authorization
34
34
  unless authorized?(path_from_hash(params))
35
- raise SecurityError, "Authorization failed! \nparams: #{params.inspect}\nsession: #{session.inspect}"
35
+ raise SecurityError, "Lockdown Authorization failed! \nparams: #{params.inspect}\nsession: #{session.inspect}"
36
36
  end
37
37
  end
38
38
 
39
- protected
40
-
41
- def path_allowed?(url)
42
- session[:access_rights] ||= Lockdown::System.public_access
43
- session[:access_rights].include?(url)
39
+ protected
40
+ def path_allowed?(path, user)
41
+ if user
42
+ return user_groups_allowed_on_path?(path, user.user_groups)
43
+ else
44
+ return path_part_of_public_access?(path)
45
+ end
46
+ end
47
+
48
+ def user_groups_allowed_on_path?(path, user_groups)
49
+ user_groups.each do |user_group|
50
+ user_group_sym = user_group.name.underscore.tr(' ','_').to_sym
51
+ rights = (Lockdown::System.public_access + Lockdown::System.access_rights_for_user_group(user_group_sym))
52
+ return true if rights.include?(path)
53
+ end
54
+ return false
55
+ end
56
+
57
+ def path_part_of_public_access?(path)
58
+ return Lockdown::System.public_access.include?(path)
44
59
  end
45
60
 
46
61
  def check_session_expiry
@@ -76,11 +91,11 @@ module Lockdown
76
91
 
77
92
  path = url_parts[5]
78
93
 
79
- return true if path_allowed?(path)
94
+ return true if path_allowed?(path, current_user)
80
95
 
81
96
  begin
82
97
  hash = ActionController::Routing::Routes.recognize_path(path, :method => method)
83
- return path_allowed?(path_from_hash(hash)) if hash
98
+ return path_allowed?(path_from_hash(hash), current_user) if hash
84
99
  rescue Exception => e
85
100
  # continue on
86
101
  end
@@ -40,7 +40,7 @@ module Lockdown
40
40
  c.set_current_user
41
41
  c.configure_lockdown
42
42
  c.check_request_authorization
43
- c.check_model_authorization
43
+ # c.check_model_authorization
44
44
  end
45
45
 
46
46
  klass.filter_parameter_logging :password, :password_confirmation
@@ -349,18 +349,18 @@ module Lockdown
349
349
 
350
350
  methods = controller.
351
351
  access_methods.
352
- collect do |am|
352
+ collect do |am|
353
353
  am[am.index('/') + 1..-1].to_sym if am.index('/')
354
354
  end.compact.inspect
355
355
 
356
356
  return <<-RUBY
357
- if controller_name == "#{controller.name}"
357
+ if controller_name == "#{controller.name}"
358
358
  if #{methods}.include?(action_name.to_sym)
359
359
  unless instance_variable_defined?(:@#{model.name})
360
360
  @#{model.name} = #{model.class_name}.find(params[#{model.param.inspect}])
361
361
  end
362
- # Need to make sure we find the model first before checking admin status.
363
- return true if current_user_is_admin?
362
+ # Need to make sure we find the model first before checking admin status.
363
+ return true if current_user_is_admin?
364
364
  unless @#{model.name}.#{model.model_method}.#{model.association}(#{model.controller_method})
365
365
  raise SecurityError, "Access to #\{action_name\} denied to #{model.name}.id #\{@#{model.name}.id\}"
366
366
  end
@@ -7,10 +7,8 @@ module Lockdown
7
7
  user ||= current_user
8
8
 
9
9
  if user
10
- session[:access_rights] = Lockdown::System.access_rights_for_user(user)
11
10
  session[:current_user_id] = user.id
12
- else
13
- session[:access_rights] = Lockdown::System.public_access
11
+ session[:access_rights] = :all if user.user_group.name.downcase == Lockdown.administrator_group_symbol.to_s
14
12
  end
15
13
  end
16
14
 
@@ -26,28 +24,6 @@ module Lockdown
26
24
  session[:access_rights] == :all
27
25
  end
28
26
 
29
- def current_user_access_in_group?(grp)
30
- return true if current_user_is_admin?
31
- Lockdown::System.user_groups[grp].each do |perm|
32
- return true if access_in_perm?(perm)
33
- end
34
- false
35
- end
36
-
37
- def access_in_perm?(perm)
38
- if Lockdown::System.permissions[perm]
39
- Lockdown::System.permissions[perm].each do |ar|
40
- return true if session_access_rights_include?(ar)
41
- end
42
- end
43
- false
44
- end
45
-
46
- def session_access_rights_include?(str)
47
- return false unless session[:access_rights]
48
- session[:access_rights].include?(str)
49
- end
50
-
51
27
  def reset_lockdown_session
52
28
  [:expiry_time, :current_user_id, :access_rights].each do |val|
53
29
  session[val] = nil if session[val]
@@ -11,7 +11,7 @@ module Lockdown
11
11
  # Lockdown::Rules defines process_rules
12
12
  process_rules
13
13
 
14
- Lockdown::Database.sync_with_db unless skip_sync?
14
+ # Lockdown::Database.sync_with_db unless skip_sync?
15
15
 
16
16
  @initialized = true if Lockdown.caching?
17
17
  end
data/lib/lockdown.rb CHANGED
@@ -7,7 +7,6 @@ require File.join("lockdown", "helper")
7
7
  require File.join("lockdown", "session")
8
8
  require File.join("lockdown", "context")
9
9
  require File.join("lockdown", "permission")
10
- require File.join("lockdown", "database")
11
10
  require File.join("lockdown", "rules")
12
11
  require File.join("lockdown", "system")
13
12
  require File.join("lockdown", "references")
@@ -16,7 +15,7 @@ module Lockdown
16
15
  extend Lockdown::References
17
16
  extend Lockdown::Helper
18
17
 
19
- VERSION = '1.6.2'
18
+ VERSION = '1.7.0'
20
19
 
21
20
  class << self
22
21
  attr_accessor :logger
@@ -41,9 +40,9 @@ module Lockdown
41
40
  # Mixin Lockdown code to the appropriate framework and ORM
42
41
  def mixin
43
42
  if mixin_resource?("frameworks")
44
- unless mixin_resource?("orms")
45
- raise NotImplementedError, "ORM unknown to Lockdown!"
46
- end
43
+ # unless mixin_resource?("orms")
44
+ # raise NotImplementedError, "ORM unknown to Lockdown!"
45
+ # end
47
46
  else
48
47
  Lockdown.logger.info "=> Note:: Lockdown cannot determine framework and therefore is not active.\n"
49
48
  end
@@ -0,0 +1,83 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{revo-lockdown}
8
+ s.version = "1.7.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Andrew Stone", "Revo Pty. Ltd."]
12
+ s.date = %q{2010-03-02}
13
+ s.description = %q{Restrict access to your controller actions. Supports basic model level restrictions as well}
14
+ s.email = %q{andy@stonean.com}
15
+ s.extra_rdoc_files = [
16
+ "README.txt"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "README.txt",
21
+ "Rakefile",
22
+ "lib/lockdown.rb",
23
+ "lib/lockdown/context.rb",
24
+ "lib/lockdown/errors.rb",
25
+ "lib/lockdown/frameworks/rails.rb",
26
+ "lib/lockdown/frameworks/rails/controller.rb",
27
+ "lib/lockdown/frameworks/rails/view.rb",
28
+ "lib/lockdown/helper.rb",
29
+ "lib/lockdown/permission.rb",
30
+ "lib/lockdown/references.rb",
31
+ "lib/lockdown/rspec_helper.rb",
32
+ "lib/lockdown/rules.rb",
33
+ "lib/lockdown/session.rb",
34
+ "lib/lockdown/system.rb",
35
+ "revo-lockdown.gemspec",
36
+ "spec/lockdown/context_spec.rb",
37
+ "spec/lockdown/frameworks/rails/controller_spec.rb",
38
+ "spec/lockdown/frameworks/rails/view_spec.rb",
39
+ "spec/lockdown/frameworks/rails_spec.rb",
40
+ "spec/lockdown/permission_spec.rb",
41
+ "spec/lockdown/rspec_helper_spec.rb",
42
+ "spec/lockdown/rules_spec.rb",
43
+ "spec/lockdown/session_spec.rb",
44
+ "spec/lockdown/system_spec.rb",
45
+ "spec/lockdown_spec.rb",
46
+ "spec/rcov.opts",
47
+ "spec/spec.opts",
48
+ "spec/spec_helper.rb"
49
+ ]
50
+ s.homepage = %q{http://stonean.com/wiki/lockdown}
51
+ s.rdoc_options = ["--charset=UTF-8"]
52
+ s.require_paths = ["lib"]
53
+ s.rubyforge_project = %q{lockdown}
54
+ s.rubygems_version = %q{1.3.5}
55
+ s.summary = %q{Authorization system for Rails 2.x}
56
+ s.test_files = [
57
+ "spec/lockdown_spec.rb",
58
+ "spec/spec_helper.rb",
59
+ "spec/lockdown/system_spec.rb",
60
+ "spec/lockdown/context_spec.rb",
61
+ "spec/lockdown/permission_spec.rb",
62
+ "spec/lockdown/session_spec.rb",
63
+ "spec/lockdown/rspec_helper_spec.rb",
64
+ "spec/lockdown/rules_spec.rb",
65
+ "spec/lockdown/frameworks/rails_spec.rb",
66
+ "spec/lockdown/frameworks/rails/view_spec.rb",
67
+ "spec/lockdown/frameworks/rails/controller_spec.rb"
68
+ ]
69
+
70
+ if s.respond_to? :specification_version then
71
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
72
+ s.specification_version = 3
73
+
74
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
75
+ s.add_development_dependency(%q<rspec>, [">= 0"])
76
+ else
77
+ s.add_dependency(%q<rspec>, [">= 0"])
78
+ end
79
+ else
80
+ s.add_dependency(%q<rspec>, [">= 0"])
81
+ end
82
+ end
83
+
@@ -83,7 +83,8 @@ describe Lockdown::Frameworks::Rails::Controller::Lock do
83
83
 
84
84
  describe "#path_allowed" do
85
85
  it "should return false for an invalid path" do
86
- @controller.send(:path_allowed?,"/no/good").should be_false
86
+ @controller.stub!(:path_part_of_public_access?).and_return(false)
87
+ @controller.send(:path_allowed?, "/no/good", nil).should be_false
87
88
  end
88
89
  end
89
90
 
@@ -158,10 +159,16 @@ describe Lockdown::Frameworks::Rails::Controller::Lock do
158
159
  end
159
160
 
160
161
  it "should return false if path not in access_rights" do
162
+ @controller.stub!(:current_user_is_admin?).and_return(false)
163
+ @controller.stub!(:current_user).and_return(nil)
164
+ @controller.stub!(:path_part_of_public_access?).and_return(false)
161
165
  @controller.send(:authorized?,@a_path).should be_false
162
166
  end
163
167
 
164
168
  it "should return true if path is in access_rights" do
169
+ @controller.stub!(:current_user_is_admin?).and_return(false)
170
+ @controller.stub!(:current_user).and_return(nil)
171
+ @controller.stub!(:path_part_of_public_access?).and_return(true)
165
172
  @controller.send(:authorized?,@sample_url).should be_true
166
173
  end
167
174
 
@@ -15,14 +15,15 @@ describe Lockdown::RspecHelper do
15
15
  @controller = TestAController.new
16
16
  @controller.stub!(:session).and_return({})
17
17
 
18
- usr = mock :user,
18
+ usr_group = mock :usr_group
19
+
20
+ usr = mock :user,
21
+ :user_group => usr_group,
19
22
  :first_name => 'John',
20
23
  :last_name => 'Smith',
21
24
  :password => 'mysecret',
22
25
  :password_confirmation => 'mysecret'
23
26
 
24
- usr_group = mock :usr_group
25
-
26
27
  Lockdown.should_receive(:maybe_parse_init)
27
28
  RspecEnv.send :include, Lockdown::RspecHelper
28
29
  @rspec_env = RspecEnv.new
@@ -35,34 +35,6 @@ describe Lockdown::Session do
35
35
  end
36
36
  end
37
37
 
38
- describe "#current_user_access_in_group?" do
39
- it "should return true if current user is admin" do
40
- @actions = :all
41
- @session = {:access_rights => @actions}
42
- @controller.stub!(:session).and_return(@session)
43
-
44
- @controller.send(:current_user_access_in_group?,:group).should == true
45
- end
46
-
47
- it "should return true if current_user has access" do
48
- user_groups = {:public_group => [:public_access]}
49
- hash = {:public_access => ["posts/index", "posts/show"]}
50
- Lockdown::System.stub!(:permissions).and_return(hash)
51
-
52
- Lockdown::System.stub!(:user_groups).and_return(user_groups)
53
- @controller.send(:current_user_access_in_group?,:public_group).should be_true
54
- end
55
-
56
- it "should return false if current_user has access" do
57
- user_groups = {:public_group => [:public_access]}
58
- hash = {:public_access => ["books/edit", "books/update"]}
59
- Lockdown::System.stub!(:permissions).and_return(hash)
60
-
61
- Lockdown::System.stub!(:user_groups).and_return(user_groups)
62
- @controller.send(:current_user_access_in_group?,:public_group).should be_false
63
- end
64
- end
65
-
66
38
  describe "#current_user_is_admin?" do
67
39
  it "should return true if access_rights == :all" do
68
40
  @actions = :all
@@ -73,40 +45,4 @@ describe Lockdown::Session do
73
45
  end
74
46
  end
75
47
 
76
- describe "#add_lockdown_session_values" do
77
- it "should set the access_rights from the user list" do
78
- array = ["posts/index", "posts/show"]
79
- Lockdown::System.stub!(:access_rights_for_user).and_return(array)
80
- usr = mock('user')
81
- usr.should_receive(:id).and_return(1234)
82
- @controller.send(:add_lockdown_session_values, usr)
83
- @session[:access_rights].should == array
84
- end
85
- end
86
-
87
-
88
- describe "#access_in_perm" do
89
- it "should return false if permissions nil" do
90
- Lockdown::System.stub!(:permissions).and_return({})
91
- @controller.send(:access_in_perm?,:dummy).should be_false
92
- end
93
-
94
- it "should return true if permission found" do
95
- hash = {:public => ["posts/index", "posts/show"]}
96
- Lockdown::System.stub!(:permissions).and_return(hash)
97
- @controller.send(:access_in_perm?,:public).should be_true
98
- end
99
- end
100
-
101
- describe "#session_access_rights_include?" do
102
- it "should return true for posts/index" do
103
- @controller.send(:session_access_rights_include?,'posts/index').
104
- should == true
105
- end
106
-
107
- it "should return false for pages/index" do
108
- @controller.send(:session_access_rights_include?,'pages/index').
109
- should == false
110
- end
111
- end
112
48
  end
@@ -18,8 +18,6 @@ describe Lockdown::System do
18
18
 
19
19
  Lockdown::System.should_receive :process_rules
20
20
 
21
- Lockdown::Database.should_receive :sync_with_db
22
-
23
21
  Lockdown.should_receive :caching?
24
22
 
25
23
  Lockdown::System.configure do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: revo-lockdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2.2
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Stone
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-12-11 00:00:00 +11:00
13
+ date: 2010-03-02 00:00:00 +11:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -37,52 +37,19 @@ files:
37
37
  - Rakefile
38
38
  - lib/lockdown.rb
39
39
  - lib/lockdown/context.rb
40
- - lib/lockdown/database.rb
41
40
  - lib/lockdown/errors.rb
42
41
  - lib/lockdown/frameworks/rails.rb
43
42
  - lib/lockdown/frameworks/rails/controller.rb
44
43
  - lib/lockdown/frameworks/rails/view.rb
45
44
  - lib/lockdown/helper.rb
46
- - lib/lockdown/orms/active_record.rb
47
45
  - lib/lockdown/permission.rb
48
46
  - lib/lockdown/references.rb
49
47
  - lib/lockdown/rspec_helper.rb
50
48
  - lib/lockdown/rules.rb
51
49
  - lib/lockdown/session.rb
52
50
  - lib/lockdown/system.rb
53
- - rails_generators/lockdown/lockdown_generator.rb
54
- - rails_generators/lockdown/templates/app/controllers/permissions_controller.rb
55
- - rails_generators/lockdown/templates/app/controllers/sessions_controller.rb
56
- - rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb
57
- - rails_generators/lockdown/templates/app/controllers/users_controller.rb
58
- - rails_generators/lockdown/templates/app/helpers/permissions_helper.rb
59
- - rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb
60
- - rails_generators/lockdown/templates/app/helpers/users_helper.rb
61
- - rails_generators/lockdown/templates/app/models/permission.rb
62
- - rails_generators/lockdown/templates/app/models/profile.rb
63
- - rails_generators/lockdown/templates/app/models/user.rb
64
- - rails_generators/lockdown/templates/app/models/user_group.rb
65
- - rails_generators/lockdown/templates/app/views/permissions/index.html.erb
66
- - rails_generators/lockdown/templates/app/views/permissions/show.html.erb
67
- - rails_generators/lockdown/templates/app/views/sessions/new.html.erb
68
- - rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb
69
- - rails_generators/lockdown/templates/app/views/user_groups/index.html.erb
70
- - rails_generators/lockdown/templates/app/views/user_groups/new.html.erb
71
- - rails_generators/lockdown/templates/app/views/user_groups/show.html.erb
72
- - rails_generators/lockdown/templates/app/views/users/edit.html.erb
73
- - rails_generators/lockdown/templates/app/views/users/index.html.erb
74
- - rails_generators/lockdown/templates/app/views/users/new.html.erb
75
- - rails_generators/lockdown/templates/app/views/users/show.html.erb
76
- - rails_generators/lockdown/templates/config/initializers/lockit.rb
77
- - rails_generators/lockdown/templates/db/migrate/create_admin_user.rb
78
- - rails_generators/lockdown/templates/db/migrate/create_permissions.rb
79
- - rails_generators/lockdown/templates/db/migrate/create_profiles.rb
80
- - rails_generators/lockdown/templates/db/migrate/create_user_groups.rb
81
- - rails_generators/lockdown/templates/db/migrate/create_users.rb
82
- - rails_generators/lockdown/templates/lib/lockdown/README
83
- - rails_generators/lockdown/templates/lib/lockdown/init.rb
51
+ - revo-lockdown.gemspec
84
52
  - spec/lockdown/context_spec.rb
85
- - spec/lockdown/database_spec.rb
86
53
  - spec/lockdown/frameworks/rails/controller_spec.rb
87
54
  - spec/lockdown/frameworks/rails/view_spec.rb
88
55
  - spec/lockdown/frameworks/rails_spec.rb
@@ -126,13 +93,12 @@ summary: Authorization system for Rails 2.x
126
93
  test_files:
127
94
  - spec/lockdown_spec.rb
128
95
  - spec/spec_helper.rb
129
- - spec/lockdown/rules_spec.rb
130
- - spec/lockdown/rspec_helper_spec.rb
96
+ - spec/lockdown/system_spec.rb
131
97
  - spec/lockdown/context_spec.rb
132
98
  - spec/lockdown/permission_spec.rb
133
- - spec/lockdown/system_spec.rb
134
- - spec/lockdown/database_spec.rb
135
99
  - spec/lockdown/session_spec.rb
100
+ - spec/lockdown/rspec_helper_spec.rb
101
+ - spec/lockdown/rules_spec.rb
136
102
  - spec/lockdown/frameworks/rails_spec.rb
137
103
  - spec/lockdown/frameworks/rails/view_spec.rb
138
104
  - spec/lockdown/frameworks/rails/controller_spec.rb
@@ -1,127 +0,0 @@
1
- module Lockdown
2
- class Database
3
- class << self
4
- # This is very basic and could be handled better using orm specific
5
- # functionality, but I wanted to keep it generic to avoid creating
6
- # an interface for each the different orm implementations.
7
- # We'll see how it works...
8
- def sync_with_db
9
-
10
- @permissions = Lockdown::System.get_permissions
11
- @user_groups = Lockdown::System.get_user_groups
12
-
13
- unless ::Permission.table_exists? && Lockdown.user_group_class.table_exists?
14
- Lockdown.logger.info ">> Lockdown tables not found. Skipping database sync."
15
- return
16
- end
17
- create_new_permissions
18
-
19
- delete_extinct_permissions
20
-
21
- maintain_user_groups
22
- rescue Exception => e
23
- Lockdown.logger.error ">> Lockdown sync failed: #{e.backtrace.join("\n")}"
24
- end
25
-
26
- # Create permissions not found in the database
27
- def create_new_permissions
28
- @permissions.each do |key|
29
- next if Lockdown::System.permission_assigned_automatically?(key)
30
- str = Lockdown.get_string(key)
31
- p = ::Permission.find(:first, :conditions => ["name = ?", str])
32
- unless p
33
- Lockdown.logger.info ">> Lockdown: Permission not found in db: #{str}, creating."
34
- ::Permission.create(:name => str)
35
- end
36
- end
37
- end
38
-
39
- # Delete the permissions not found in init.rb
40
- def delete_extinct_permissions
41
- db_perms = ::Permission.find(:all).dup
42
- db_perms.each do |dbp|
43
- unless @permissions.include?(Lockdown.get_symbol(dbp.name))
44
- Lockdown.logger.info ">> Lockdown: Permission no longer in init.rb: #{dbp.name}, deleting."
45
- ug_table = Lockdown.user_groups_hbtm_reference.to_s
46
- if "permissions" < ug_table
47
- join_table = "permissions_#{ug_table}"
48
- else
49
- join_table = "#{ug_table}_permissions"
50
- end
51
- Lockdown.database_execute("delete from #{join_table} where permission_id = #{dbp.id}")
52
- dbp.destroy
53
- end
54
- end
55
- end
56
-
57
- def maintain_user_groups
58
- # Create user groups not found in the database
59
- @user_groups.each do |key|
60
- str = Lockdown.get_string(key)
61
- unless ug = Lockdown.user_group_class.find(:first, :conditions => ["name = ?", str])
62
- create_user_group(str, key)
63
- else
64
- # Remove permissions from user group not found in init.rb
65
- remove_invalid_permissions(ug, key)
66
-
67
- # Add in permissions from init.rb not found in database
68
- add_valid_permissions(ug, key)
69
- end
70
- end
71
- end
72
-
73
- def create_user_group(name_str, key)
74
- Lockdown.logger.info ">> Lockdown: #{Lockdown::System.fetch(:user_group_model)} not in the db: #{name_str}, creating."
75
- ug = Lockdown.user_group_class.create(:name => name_str)
76
- #Inefficient, definitely, but shouldn't have any issues across orms.
77
- #
78
- Lockdown::System.permissions_for_user_group(key).each do |perm|
79
-
80
- if Lockdown::System.permission_assigned_automatically?(perm)
81
- Lockdown.logger.info ">> Permission #{perm} cannot be assigned to #{name_str}. Already belongs to built in user group (public or protected)."
82
- raise InvalidPermissionAssignment, "Invalid permission assignment"
83
- end
84
-
85
- p = ::Permission.find(:first, :conditions => ["name = ?", Lockdown.get_string(perm)])
86
-
87
- ug_table = Lockdown.user_groups_hbtm_reference.to_s
88
- if "permissions" < ug_table
89
- join_table = "permissions_#{ug_table}"
90
- else
91
- join_table = "#{ug_table}_permissions"
92
- end
93
- Lockdown.database_execute "insert into #{join_table}(permission_id, #{Lockdown.user_group_id_reference}) values(#{p.id}, #{ug.id})"
94
- end
95
- end
96
-
97
- def remove_invalid_permissions(ug, key)
98
- ug.permissions.each do |perm|
99
- perm_sym = Lockdown.get_symbol(perm)
100
- perm_string = Lockdown.get_string(perm)
101
- unless Lockdown::System.permissions_for_user_group(key).include?(perm_sym)
102
- Lockdown.logger.info ">> Lockdown: Permission: #{perm_string} no longer associated to User Group: #{ug.name}, deleting."
103
- ug.permissions.delete(perm)
104
- end
105
- end
106
- end
107
-
108
- def add_valid_permissions(ug, key)
109
- Lockdown::System.permissions_for_user_group(key).each do |perm|
110
- perm_string = Lockdown.get_string(perm)
111
- found = false
112
- # see if permission exists
113
- ug.permissions.each do |p|
114
- found = true if Lockdown.get_string(p) == perm_string
115
- end
116
- # if not found, add it
117
- unless found
118
- Lockdown.logger.info ">> Lockdown: Permission: #{perm_string} not found for User Group: #{ug.name}, adding it."
119
- p = ::Permission.find(:first, :conditions => ["name = ?", perm_string])
120
- ug.permissions << p
121
- end
122
- end
123
- end
124
-
125
- end # class block
126
- end # Database
127
- end #Lockdown
@@ -1,68 +0,0 @@
1
- module Lockdown
2
- module Orms
3
- module ActiveRecord
4
- class << self
5
- def use_me?
6
- Object.const_defined?("ActiveRecord") && ::ActiveRecord.const_defined?("Base")
7
- end
8
-
9
- def included(mod)
10
- mod.extend Lockdown::Orms::ActiveRecord::Helper
11
- mixin
12
- end
13
-
14
- def mixin
15
- Lockdown.orm_parent.class_eval do
16
- include Lockdown::Orms::ActiveRecord::Stamps
17
- end
18
- end
19
- end # class block
20
-
21
- module Helper
22
- def orm_parent
23
- ::ActiveRecord::Base
24
- end
25
-
26
- def database_execute(query)
27
- orm_parent.connection.execute(query)
28
- end
29
-
30
- def database_query(query)
31
- orm_parent.connection.execute(query)
32
- end
33
-
34
- def database_table_exists?(klass)
35
- klass.table_exists?
36
- end
37
- end
38
-
39
- module Stamps
40
- def self.included(base)
41
- base.class_eval do
42
- alias_method :create_without_stamps, :create
43
- alias_method :create, :create_with_stamps
44
- alias_method :update_without_stamps, :update
45
- alias_method :update, :update_with_stamps
46
- end
47
- end
48
-
49
- def current_who_did_it
50
- Thread.current[:who_did_it]
51
- end
52
-
53
- def create_with_stamps
54
- pid = current_who_did_it || Lockdown::System.fetch(:default_who_did_it)
55
- self[:created_by] = pid if self.respond_to?(:created_by)
56
- self[:updated_by] = pid if self.respond_to?(:updated_by)
57
- create_without_stamps
58
- end
59
-
60
- def update_with_stamps
61
- pid = current_who_did_it || Lockdown::System.fetch(:default_who_did_it)
62
- self[:updated_by] = pid if self.respond_to?(:updated_by)
63
- update_without_stamps
64
- end
65
- end
66
- end
67
- end
68
- end