lockdown_vail 1.6.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/README.txt +36 -0
- data/Rakefile +38 -0
- data/VERSION +1 -0
- data/lib/lockdown/context.rb +41 -0
- data/lib/lockdown/database.rb +41 -0
- data/lib/lockdown/errors.rb +11 -0
- data/lib/lockdown/frameworks/rails/controller.rb +187 -0
- data/lib/lockdown/frameworks/rails/view.rb +50 -0
- data/lib/lockdown/frameworks/rails.rb +114 -0
- data/lib/lockdown/helper.rb +111 -0
- data/lib/lockdown/orms/active_record.rb +68 -0
- data/lib/lockdown/permission.rb +222 -0
- data/lib/lockdown/references.rb +19 -0
- data/lib/lockdown/rspec_helper.rb +114 -0
- data/lib/lockdown/rules.rb +372 -0
- data/lib/lockdown/session.rb +66 -0
- data/lib/lockdown/system.rb +58 -0
- data/lib/lockdown.rb +87 -0
- data/lockdown.gemspec +118 -0
- data/lockdown_vail.gemspec +120 -0
- data/rails_generators/lockdown/lockdown_generator.rb +274 -0
- data/rails_generators/lockdown/templates/app/controllers/permissions_controller.rb +22 -0
- data/rails_generators/lockdown/templates/app/controllers/sessions_controller.rb +39 -0
- data/rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb +122 -0
- data/rails_generators/lockdown/templates/app/controllers/users_controller.rb +117 -0
- data/rails_generators/lockdown/templates/app/helpers/permissions_helper.rb +2 -0
- data/rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb +2 -0
- data/rails_generators/lockdown/templates/app/helpers/users_helper.rb +2 -0
- data/rails_generators/lockdown/templates/app/models/permission.rb +13 -0
- data/rails_generators/lockdown/templates/app/models/profile.rb +10 -0
- data/rails_generators/lockdown/templates/app/models/user.rb +95 -0
- data/rails_generators/lockdown/templates/app/models/user_group.rb +15 -0
- data/rails_generators/lockdown/templates/app/views/permissions/index.html.erb +16 -0
- data/rails_generators/lockdown/templates/app/views/permissions/show.html.erb +26 -0
- data/rails_generators/lockdown/templates/app/views/sessions/new.html.erb +12 -0
- data/rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb +33 -0
- data/rails_generators/lockdown/templates/app/views/user_groups/index.html.erb +20 -0
- data/rails_generators/lockdown/templates/app/views/user_groups/new.html.erb +31 -0
- data/rails_generators/lockdown/templates/app/views/user_groups/show.html.erb +29 -0
- data/rails_generators/lockdown/templates/app/views/users/edit.html.erb +51 -0
- data/rails_generators/lockdown/templates/app/views/users/index.html.erb +22 -0
- data/rails_generators/lockdown/templates/app/views/users/new.html.erb +50 -0
- data/rails_generators/lockdown/templates/app/views/users/show.html.erb +33 -0
- data/rails_generators/lockdown/templates/config/initializers/lockit.rb +1 -0
- data/rails_generators/lockdown/templates/db/migrate/create_admin_user.rb +17 -0
- data/rails_generators/lockdown/templates/db/migrate/create_permissions.rb +19 -0
- data/rails_generators/lockdown/templates/db/migrate/create_profiles.rb +26 -0
- data/rails_generators/lockdown/templates/db/migrate/create_user_groups.rb +19 -0
- data/rails_generators/lockdown/templates/db/migrate/create_users.rb +17 -0
- data/rails_generators/lockdown/templates/lib/lockdown/README +42 -0
- data/rails_generators/lockdown/templates/lib/lockdown/init.rb +136 -0
- data/spec/lockdown/context_spec.rb +191 -0
- data/spec/lockdown/database_spec.rb +66 -0
- data/spec/lockdown/frameworks/rails/controller_spec.rb +240 -0
- data/spec/lockdown/frameworks/rails/view_spec.rb +87 -0
- data/spec/lockdown/frameworks/rails_spec.rb +163 -0
- data/spec/lockdown/permission_spec.rb +156 -0
- data/spec/lockdown/rspec_helper_spec.rb +41 -0
- data/spec/lockdown/rules_spec.rb +245 -0
- data/spec/lockdown/session_spec.rb +125 -0
- data/spec/lockdown/system_spec.rb +51 -0
- data/spec/lockdown_spec.rb +19 -0
- data/spec/rcov.opts +5 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +8 -0
- metadata +140 -0
data/lib/lockdown.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
require File.join("lockdown", "errors")
|
6
|
+
require File.join("lockdown", "helper")
|
7
|
+
require File.join("lockdown", "session")
|
8
|
+
require File.join("lockdown", "context")
|
9
|
+
require File.join("lockdown", "permission")
|
10
|
+
require File.join("lockdown", "database")
|
11
|
+
require File.join("lockdown", "rules")
|
12
|
+
require File.join("lockdown", "system")
|
13
|
+
require File.join("lockdown", "references")
|
14
|
+
|
15
|
+
module Lockdown
|
16
|
+
extend Lockdown::References
|
17
|
+
extend Lockdown::Helper
|
18
|
+
|
19
|
+
VERSION = '1.6.2.1'
|
20
|
+
|
21
|
+
class << self
|
22
|
+
attr_accessor :logger
|
23
|
+
|
24
|
+
# Returns the version string for the library.
|
25
|
+
def version
|
26
|
+
VERSION
|
27
|
+
end
|
28
|
+
|
29
|
+
def major_version
|
30
|
+
version.split('.')[0].to_i
|
31
|
+
end
|
32
|
+
|
33
|
+
def minor_version
|
34
|
+
version.split('.')[1].to_i
|
35
|
+
end
|
36
|
+
|
37
|
+
def patch_version
|
38
|
+
version.split('.')[2].to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
# Mixin Lockdown code to the appropriate framework and ORM
|
42
|
+
def mixin
|
43
|
+
if mixin_resource?("frameworks")
|
44
|
+
unless mixin_resource?("orms")
|
45
|
+
raise NotImplementedError, "ORM unknown to Lockdown!"
|
46
|
+
end
|
47
|
+
else
|
48
|
+
Lockdown.logger.info "=> Note:: Lockdown cannot determine framework and therefore is not active.\n"
|
49
|
+
end
|
50
|
+
end # mixin
|
51
|
+
|
52
|
+
def maybe_parse_init
|
53
|
+
return if Lockdown::System.initialized?
|
54
|
+
|
55
|
+
if File.exists?(Lockdown.init_file)
|
56
|
+
Lockdown.logger.info "=> Requiring Lockdown rules engine: #{Lockdown.init_file} \n"
|
57
|
+
load Lockdown.init_file
|
58
|
+
else
|
59
|
+
Lockdown.logger.info "=> Note:: Lockdown couldn't find init file: #{Lockdown.init_file}\n"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def mixin_resource?(str)
|
66
|
+
wildcard_path = File.join( File.dirname(__FILE__), 'lockdown', str , '*.rb' )
|
67
|
+
Dir[wildcard_path].each do |f|
|
68
|
+
require f
|
69
|
+
module_name = File.basename(f).split(".")[0]
|
70
|
+
module_class = eval("Lockdown::#{str.capitalize}::#{Lockdown.camelize(module_name)}")
|
71
|
+
if module_class.use_me?
|
72
|
+
include module_class
|
73
|
+
return true
|
74
|
+
end
|
75
|
+
end
|
76
|
+
false
|
77
|
+
end # mixin_resource?
|
78
|
+
end # class block
|
79
|
+
|
80
|
+
self.logger = Logger.new(STDOUT)
|
81
|
+
|
82
|
+
end # Lockdown
|
83
|
+
|
84
|
+
Lockdown.logger.info "=> Mixing in Lockdown version: #{Lockdown.version} \n"
|
85
|
+
Lockdown.mixin
|
86
|
+
|
87
|
+
|
data/lockdown.gemspec
ADDED
@@ -0,0 +1,118 @@
|
|
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{lockdown}
|
8
|
+
s.version = "1.6.2"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Andrew Stone"]
|
12
|
+
s.date = %q{2009-11-28}
|
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/database.rb",
|
25
|
+
"lib/lockdown/errors.rb",
|
26
|
+
"lib/lockdown/frameworks/rails.rb",
|
27
|
+
"lib/lockdown/frameworks/rails/controller.rb",
|
28
|
+
"lib/lockdown/frameworks/rails/view.rb",
|
29
|
+
"lib/lockdown/helper.rb",
|
30
|
+
"lib/lockdown/orms/active_record.rb",
|
31
|
+
"lib/lockdown/permission.rb",
|
32
|
+
"lib/lockdown/references.rb",
|
33
|
+
"lib/lockdown/rspec_helper.rb",
|
34
|
+
"lib/lockdown/rules.rb",
|
35
|
+
"lib/lockdown/session.rb",
|
36
|
+
"lib/lockdown/system.rb",
|
37
|
+
"lockdown.gemspec",
|
38
|
+
"rails_generators/lockdown/lockdown_generator.rb",
|
39
|
+
"rails_generators/lockdown/templates/app/controllers/permissions_controller.rb",
|
40
|
+
"rails_generators/lockdown/templates/app/controllers/sessions_controller.rb",
|
41
|
+
"rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb",
|
42
|
+
"rails_generators/lockdown/templates/app/controllers/users_controller.rb",
|
43
|
+
"rails_generators/lockdown/templates/app/helpers/permissions_helper.rb",
|
44
|
+
"rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb",
|
45
|
+
"rails_generators/lockdown/templates/app/helpers/users_helper.rb",
|
46
|
+
"rails_generators/lockdown/templates/app/models/permission.rb",
|
47
|
+
"rails_generators/lockdown/templates/app/models/profile.rb",
|
48
|
+
"rails_generators/lockdown/templates/app/models/user.rb",
|
49
|
+
"rails_generators/lockdown/templates/app/models/user_group.rb",
|
50
|
+
"rails_generators/lockdown/templates/app/views/permissions/index.html.erb",
|
51
|
+
"rails_generators/lockdown/templates/app/views/permissions/show.html.erb",
|
52
|
+
"rails_generators/lockdown/templates/app/views/sessions/new.html.erb",
|
53
|
+
"rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb",
|
54
|
+
"rails_generators/lockdown/templates/app/views/user_groups/index.html.erb",
|
55
|
+
"rails_generators/lockdown/templates/app/views/user_groups/new.html.erb",
|
56
|
+
"rails_generators/lockdown/templates/app/views/user_groups/show.html.erb",
|
57
|
+
"rails_generators/lockdown/templates/app/views/users/edit.html.erb",
|
58
|
+
"rails_generators/lockdown/templates/app/views/users/index.html.erb",
|
59
|
+
"rails_generators/lockdown/templates/app/views/users/new.html.erb",
|
60
|
+
"rails_generators/lockdown/templates/app/views/users/show.html.erb",
|
61
|
+
"rails_generators/lockdown/templates/config/initializers/lockit.rb",
|
62
|
+
"rails_generators/lockdown/templates/db/migrate/create_admin_user.rb",
|
63
|
+
"rails_generators/lockdown/templates/db/migrate/create_permissions.rb",
|
64
|
+
"rails_generators/lockdown/templates/db/migrate/create_profiles.rb",
|
65
|
+
"rails_generators/lockdown/templates/db/migrate/create_user_groups.rb",
|
66
|
+
"rails_generators/lockdown/templates/db/migrate/create_users.rb",
|
67
|
+
"rails_generators/lockdown/templates/lib/lockdown/README",
|
68
|
+
"rails_generators/lockdown/templates/lib/lockdown/init.rb",
|
69
|
+
"spec/lockdown/context_spec.rb",
|
70
|
+
"spec/lockdown/database_spec.rb",
|
71
|
+
"spec/lockdown/frameworks/rails/controller_spec.rb",
|
72
|
+
"spec/lockdown/frameworks/rails/view_spec.rb",
|
73
|
+
"spec/lockdown/frameworks/rails_spec.rb",
|
74
|
+
"spec/lockdown/permission_spec.rb",
|
75
|
+
"spec/lockdown/rspec_helper_spec.rb",
|
76
|
+
"spec/lockdown/rules_spec.rb",
|
77
|
+
"spec/lockdown/session_spec.rb",
|
78
|
+
"spec/lockdown/system_spec.rb",
|
79
|
+
"spec/lockdown_spec.rb",
|
80
|
+
"spec/rcov.opts",
|
81
|
+
"spec/spec.opts",
|
82
|
+
"spec/spec_helper.rb"
|
83
|
+
]
|
84
|
+
s.homepage = %q{http://stonean.com/wiki/lockdown}
|
85
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
86
|
+
s.require_paths = ["lib"]
|
87
|
+
s.rubyforge_project = %q{lockdown}
|
88
|
+
s.rubygems_version = %q{1.3.5}
|
89
|
+
s.summary = %q{Authorization system for Rails 2.x}
|
90
|
+
s.test_files = [
|
91
|
+
"spec/lockdown/context_spec.rb",
|
92
|
+
"spec/lockdown/database_spec.rb",
|
93
|
+
"spec/lockdown/frameworks/rails/controller_spec.rb",
|
94
|
+
"spec/lockdown/frameworks/rails/view_spec.rb",
|
95
|
+
"spec/lockdown/frameworks/rails_spec.rb",
|
96
|
+
"spec/lockdown/permission_spec.rb",
|
97
|
+
"spec/lockdown/rspec_helper_spec.rb",
|
98
|
+
"spec/lockdown/rules_spec.rb",
|
99
|
+
"spec/lockdown/session_spec.rb",
|
100
|
+
"spec/lockdown/system_spec.rb",
|
101
|
+
"spec/lockdown_spec.rb",
|
102
|
+
"spec/spec_helper.rb"
|
103
|
+
]
|
104
|
+
|
105
|
+
if s.respond_to? :specification_version then
|
106
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
107
|
+
s.specification_version = 3
|
108
|
+
|
109
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
110
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
111
|
+
else
|
112
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
113
|
+
end
|
114
|
+
else
|
115
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
@@ -0,0 +1,120 @@
|
|
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{lockdown_vail}
|
8
|
+
s.version = "1.6.2.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Andrew Stone"]
|
12
|
+
s.date = %q{2010-03-12}
|
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
|
+
"VERSION",
|
23
|
+
"lib/lockdown.rb",
|
24
|
+
"lib/lockdown/context.rb",
|
25
|
+
"lib/lockdown/database.rb",
|
26
|
+
"lib/lockdown/errors.rb",
|
27
|
+
"lib/lockdown/frameworks/rails.rb",
|
28
|
+
"lib/lockdown/frameworks/rails/controller.rb",
|
29
|
+
"lib/lockdown/frameworks/rails/view.rb",
|
30
|
+
"lib/lockdown/helper.rb",
|
31
|
+
"lib/lockdown/orms/active_record.rb",
|
32
|
+
"lib/lockdown/permission.rb",
|
33
|
+
"lib/lockdown/references.rb",
|
34
|
+
"lib/lockdown/rspec_helper.rb",
|
35
|
+
"lib/lockdown/rules.rb",
|
36
|
+
"lib/lockdown/session.rb",
|
37
|
+
"lib/lockdown/system.rb",
|
38
|
+
"lockdown.gemspec",
|
39
|
+
"lockdown_vail.gemspec",
|
40
|
+
"rails_generators/lockdown/lockdown_generator.rb",
|
41
|
+
"rails_generators/lockdown/templates/app/controllers/permissions_controller.rb",
|
42
|
+
"rails_generators/lockdown/templates/app/controllers/sessions_controller.rb",
|
43
|
+
"rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb",
|
44
|
+
"rails_generators/lockdown/templates/app/controllers/users_controller.rb",
|
45
|
+
"rails_generators/lockdown/templates/app/helpers/permissions_helper.rb",
|
46
|
+
"rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb",
|
47
|
+
"rails_generators/lockdown/templates/app/helpers/users_helper.rb",
|
48
|
+
"rails_generators/lockdown/templates/app/models/permission.rb",
|
49
|
+
"rails_generators/lockdown/templates/app/models/profile.rb",
|
50
|
+
"rails_generators/lockdown/templates/app/models/user.rb",
|
51
|
+
"rails_generators/lockdown/templates/app/models/user_group.rb",
|
52
|
+
"rails_generators/lockdown/templates/app/views/permissions/index.html.erb",
|
53
|
+
"rails_generators/lockdown/templates/app/views/permissions/show.html.erb",
|
54
|
+
"rails_generators/lockdown/templates/app/views/sessions/new.html.erb",
|
55
|
+
"rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb",
|
56
|
+
"rails_generators/lockdown/templates/app/views/user_groups/index.html.erb",
|
57
|
+
"rails_generators/lockdown/templates/app/views/user_groups/new.html.erb",
|
58
|
+
"rails_generators/lockdown/templates/app/views/user_groups/show.html.erb",
|
59
|
+
"rails_generators/lockdown/templates/app/views/users/edit.html.erb",
|
60
|
+
"rails_generators/lockdown/templates/app/views/users/index.html.erb",
|
61
|
+
"rails_generators/lockdown/templates/app/views/users/new.html.erb",
|
62
|
+
"rails_generators/lockdown/templates/app/views/users/show.html.erb",
|
63
|
+
"rails_generators/lockdown/templates/config/initializers/lockit.rb",
|
64
|
+
"rails_generators/lockdown/templates/db/migrate/create_admin_user.rb",
|
65
|
+
"rails_generators/lockdown/templates/db/migrate/create_permissions.rb",
|
66
|
+
"rails_generators/lockdown/templates/db/migrate/create_profiles.rb",
|
67
|
+
"rails_generators/lockdown/templates/db/migrate/create_user_groups.rb",
|
68
|
+
"rails_generators/lockdown/templates/db/migrate/create_users.rb",
|
69
|
+
"rails_generators/lockdown/templates/lib/lockdown/README",
|
70
|
+
"rails_generators/lockdown/templates/lib/lockdown/init.rb",
|
71
|
+
"spec/lockdown/context_spec.rb",
|
72
|
+
"spec/lockdown/database_spec.rb",
|
73
|
+
"spec/lockdown/frameworks/rails/controller_spec.rb",
|
74
|
+
"spec/lockdown/frameworks/rails/view_spec.rb",
|
75
|
+
"spec/lockdown/frameworks/rails_spec.rb",
|
76
|
+
"spec/lockdown/permission_spec.rb",
|
77
|
+
"spec/lockdown/rspec_helper_spec.rb",
|
78
|
+
"spec/lockdown/rules_spec.rb",
|
79
|
+
"spec/lockdown/session_spec.rb",
|
80
|
+
"spec/lockdown/system_spec.rb",
|
81
|
+
"spec/lockdown_spec.rb",
|
82
|
+
"spec/rcov.opts",
|
83
|
+
"spec/spec.opts",
|
84
|
+
"spec/spec_helper.rb"
|
85
|
+
]
|
86
|
+
s.homepage = %q{http://stonean.com/wiki/lockdown}
|
87
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
88
|
+
s.require_paths = ["lib"]
|
89
|
+
s.rubyforge_project = %q{lockdown}
|
90
|
+
s.rubygems_version = %q{1.3.5}
|
91
|
+
s.summary = %q{Authorization system for Rails 2.x}
|
92
|
+
s.test_files = [
|
93
|
+
"spec/lockdown/context_spec.rb",
|
94
|
+
"spec/lockdown/database_spec.rb",
|
95
|
+
"spec/lockdown/frameworks/rails/controller_spec.rb",
|
96
|
+
"spec/lockdown/frameworks/rails/view_spec.rb",
|
97
|
+
"spec/lockdown/frameworks/rails_spec.rb",
|
98
|
+
"spec/lockdown/permission_spec.rb",
|
99
|
+
"spec/lockdown/rspec_helper_spec.rb",
|
100
|
+
"spec/lockdown/rules_spec.rb",
|
101
|
+
"spec/lockdown/session_spec.rb",
|
102
|
+
"spec/lockdown/system_spec.rb",
|
103
|
+
"spec/lockdown_spec.rb",
|
104
|
+
"spec/spec_helper.rb"
|
105
|
+
]
|
106
|
+
|
107
|
+
if s.respond_to? :specification_version then
|
108
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
109
|
+
s.specification_version = 3
|
110
|
+
|
111
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
112
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
113
|
+
else
|
114
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
115
|
+
end
|
116
|
+
else
|
117
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
@@ -0,0 +1,274 @@
|
|
1
|
+
@override_next_migration_string = false
|
2
|
+
|
3
|
+
if Rails::VERSION::MAJOR >= 2 && Rails::VERSION::MINOR >= 1
|
4
|
+
if Rails::VERSION::TINY == 0
|
5
|
+
@override_next_migration_string = true
|
6
|
+
elsif ActiveRecord::Base.timestamped_migrations
|
7
|
+
@override_next_migration_string = true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
if @override_next_migration_string
|
12
|
+
class Rails::Generator::Commands::Base
|
13
|
+
protected
|
14
|
+
def next_migration_string(padding = 3)
|
15
|
+
sleep(1)
|
16
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class LockdownGenerator < Rails::Generator::Base
|
22
|
+
attr_accessor :file_name, :action_name, :namespace, :view_path, :controller_path
|
23
|
+
|
24
|
+
def initialize(runtime_args, runtime_options = {})
|
25
|
+
super
|
26
|
+
if Rails::VERSION::MAJOR >= 2 && Rails::VERSION::MINOR >= 1
|
27
|
+
@action_name = "action_name"
|
28
|
+
else
|
29
|
+
@action_name = "@action_name"
|
30
|
+
end
|
31
|
+
|
32
|
+
@namespace = options[:namespace] if options[:namespace]
|
33
|
+
|
34
|
+
# so if the namespace option exists it sets the correct view path and controller path
|
35
|
+
@view_path = "app/views"
|
36
|
+
@controller_path = "app/controllers"
|
37
|
+
@helper_path = "app/helpers"
|
38
|
+
@lib_path = "lib/lockdown"
|
39
|
+
|
40
|
+
@initializer = "config/environment.rb"
|
41
|
+
|
42
|
+
if @namespace
|
43
|
+
@view_path += "/#{@namespace}"
|
44
|
+
@controller_path += "/#{@namespace}"
|
45
|
+
@helper_path += "/#{@namespace}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def manifest
|
50
|
+
record do |m|
|
51
|
+
@m = m
|
52
|
+
# Ensure appropriate folder(s) exists
|
53
|
+
@m.directory @view_path
|
54
|
+
@m.directory @controller_path
|
55
|
+
@m.directory @helper_path
|
56
|
+
@m.directory @lib_path
|
57
|
+
|
58
|
+
unless options[:skip_rules]
|
59
|
+
@m.file "lib/lockdown/README", "lib/lockdown/README"
|
60
|
+
@m.file "lib/lockdown/init.rb", "lib/lockdown/init.rb"
|
61
|
+
end
|
62
|
+
|
63
|
+
add_management if options[:add_management]
|
64
|
+
|
65
|
+
add_login if options[:add_login]
|
66
|
+
|
67
|
+
add_models
|
68
|
+
|
69
|
+
@m.file "config/initializers/lockit.rb", "config/initializers/lockit.rb"
|
70
|
+
end #record do |m|
|
71
|
+
end
|
72
|
+
|
73
|
+
protected
|
74
|
+
|
75
|
+
def add_management
|
76
|
+
@m.directory "#{@view_path}/users"
|
77
|
+
@m.directory "#{@view_path}/user_groups"
|
78
|
+
@m.directory "#{@view_path}/permissions"
|
79
|
+
|
80
|
+
write_controller("permissions")
|
81
|
+
write_controller("users")
|
82
|
+
write_controller("user_groups")
|
83
|
+
|
84
|
+
copy_views("users")
|
85
|
+
|
86
|
+
copy_views("user_groups")
|
87
|
+
|
88
|
+
@m.template "app/views/permissions/index.html.erb",
|
89
|
+
"#{@view_path}/permissions/index.html.erb"
|
90
|
+
|
91
|
+
@m.template "app/views/permissions/show.html.erb",
|
92
|
+
"#{@view_path}/permissions/show.html.erb"
|
93
|
+
|
94
|
+
add_management_routes
|
95
|
+
add_management_permissions
|
96
|
+
end
|
97
|
+
|
98
|
+
def add_login
|
99
|
+
@m.directory "app/views/sessions"
|
100
|
+
|
101
|
+
@m.template "app/controllers/sessions_controller.rb",
|
102
|
+
"app/controllers/sessions_controller.rb"
|
103
|
+
|
104
|
+
@m.template "app/views/sessions/new.html.erb",
|
105
|
+
"app/views/sessions/new.html.erb"
|
106
|
+
|
107
|
+
add_login_routes
|
108
|
+
add_login_permissions
|
109
|
+
end
|
110
|
+
|
111
|
+
def add_models
|
112
|
+
@m.directory 'app/models'
|
113
|
+
|
114
|
+
write_model("user_group")
|
115
|
+
write_model("permission")
|
116
|
+
|
117
|
+
if options[:add_lockdown_authentication]
|
118
|
+
write_model("user")
|
119
|
+
write_model("profile")
|
120
|
+
end
|
121
|
+
|
122
|
+
unless options[:skip_migrations]
|
123
|
+
write_migration("create_user_groups")
|
124
|
+
write_migration("create_permissions")
|
125
|
+
|
126
|
+
if options[:add_lockdown_authentication]
|
127
|
+
write_migration("create_profiles")
|
128
|
+
write_migration("create_users")
|
129
|
+
write_migration("create_admin_user")
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def copy_views(vw)
|
135
|
+
@m.template "app/views/#{vw}/index.html.erb", "#{@view_path}/#{vw}/index.html.erb"
|
136
|
+
@m.template "app/views/#{vw}/show.html.erb", "#{@view_path}/#{vw}/show.html.erb"
|
137
|
+
@m.template "app/views/#{vw}/edit.html.erb", "#{@view_path}/#{vw}/edit.html.erb"
|
138
|
+
@m.template "app/views/#{vw}/new.html.erb", "#{@view_path}/#{vw}/new.html.erb"
|
139
|
+
end
|
140
|
+
|
141
|
+
def add_login_permissions
|
142
|
+
add_permissions "set_permission(:sessions_management).with_controller(:sessions)"
|
143
|
+
|
144
|
+
add_predefined_user_group "set_public_access :sessions_management"
|
145
|
+
end
|
146
|
+
|
147
|
+
def add_management_routes
|
148
|
+
if @namespace.blank?
|
149
|
+
permissions = %Q(\tmap.resources :permissions)
|
150
|
+
users = %Q(\tmap.resources :users)
|
151
|
+
user_groups = %Q(\tmap.resources :user_groups)
|
152
|
+
routes = [permissions, user_groups, users].join("\n\n")
|
153
|
+
else
|
154
|
+
routes = %Q(\tmap.namespace :#{@namespace} do |#{@namespace}|\n\t\t#{@namespace}.resources :permissions\n\t\t#{@namespace}.resources :users\n\t\t#{@namespace}.resources :user_groups\n\tend)
|
155
|
+
end
|
156
|
+
|
157
|
+
write_routes_file(routes)
|
158
|
+
end
|
159
|
+
|
160
|
+
def add_management_permissions
|
161
|
+
perms = []
|
162
|
+
perms << "set_permission(:users_management).with_controller(:#{@namespace.blank? ? "users" : "#{@namespace}__users"})"
|
163
|
+
perms << "set_permission(:user_groups_management).with_controller(:#{@namespace.blank? ? "user_groups" : "#{@namespace}__user_groups"})"
|
164
|
+
perms << "set_permission(:permissions_management).with_controller(:#{@namespace.blank? ? "permissions" : "#{@namespace}__permissions"})"
|
165
|
+
perms << "set_permission(:my_account).with_controller(:#{@namespace.blank? ? "users" : "#{@namespace}__users"}).only_methods(:edit, :update, :show)"
|
166
|
+
|
167
|
+
add_permissions perms.join("\n ")
|
168
|
+
|
169
|
+
add_predefined_user_group "set_protected_access :my_account"
|
170
|
+
end
|
171
|
+
|
172
|
+
def add_permissions(str)
|
173
|
+
sentinel = '# Define your permissions here:'
|
174
|
+
write_init_file(sentinel, str)
|
175
|
+
end
|
176
|
+
|
177
|
+
def add_predefined_user_group(str)
|
178
|
+
sentinel = '# Define the built-in user groups here:'
|
179
|
+
write_init_file(sentinel, str)
|
180
|
+
end
|
181
|
+
|
182
|
+
def add_login_routes
|
183
|
+
sessions = %Q(\tmap.resources :sessions)
|
184
|
+
home = %Q(\tmap.home '', :controller => 'sessions', :action => 'new')
|
185
|
+
login = %Q(\tmap.login '/login', :controller => 'sessions', :action => 'new')
|
186
|
+
logout = %Q(\tmap.logout '/logout', :controller => 'sessions', :action => 'destroy')
|
187
|
+
routes = [sessions, home, login, logout].join("\n\n")
|
188
|
+
|
189
|
+
write_routes_file(routes)
|
190
|
+
end
|
191
|
+
|
192
|
+
def banner
|
193
|
+
<<-EOS
|
194
|
+
Installs the lockdown framework to managing users user_groups
|
195
|
+
and viewing permissions. Also includes a login screen.
|
196
|
+
|
197
|
+
By default the entire set of stubs are installed.
|
198
|
+
|
199
|
+
Please use the appropriate options to customize your install.
|
200
|
+
|
201
|
+
USAGE: #{$0} #{spec.name}
|
202
|
+
EOS
|
203
|
+
end
|
204
|
+
|
205
|
+
def add_options!(opt)
|
206
|
+
opt.separator ''
|
207
|
+
opt.separator 'Options:'
|
208
|
+
|
209
|
+
opt.on("--namespace=admin",
|
210
|
+
"Install lockdown templates with a namespace, in this example 'admin'.") do |v|
|
211
|
+
options[:namespace] = v
|
212
|
+
end
|
213
|
+
|
214
|
+
opt.on("--add-lockdown-authentication",
|
215
|
+
"Create user model + --add-login functionality.") do |v|
|
216
|
+
options[:add_lockdown_authentication] = v
|
217
|
+
end
|
218
|
+
|
219
|
+
opt.on("--add-management",
|
220
|
+
"Create user, user_group, permission management controllers and views.") do |v|
|
221
|
+
options[:add_management] = v
|
222
|
+
end
|
223
|
+
|
224
|
+
opt.on("--add-login",
|
225
|
+
"Create session controller and views.") do |v|
|
226
|
+
options[:add_login] = v
|
227
|
+
end
|
228
|
+
|
229
|
+
opt.on("--skip-rules",
|
230
|
+
"Skip installation of lib/lockdown/init.rb lib/lockdown/session.rb") do |v|
|
231
|
+
options[:skip_rules] = v
|
232
|
+
end
|
233
|
+
|
234
|
+
opt.on("--skip-migrations",
|
235
|
+
"Skip migrations installation") do |v|
|
236
|
+
options[:skip_migrations] = v
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
def write_migration(str)
|
241
|
+
@m.migration_template "db/migrate/#{str}.rb", "db/migrate",
|
242
|
+
:migration_file_name => str
|
243
|
+
end
|
244
|
+
|
245
|
+
def write_model(str)
|
246
|
+
@m.file "app/models/#{str}.rb", "app/models/#{str}.rb"
|
247
|
+
end
|
248
|
+
|
249
|
+
def write_controller(str)
|
250
|
+
@m.template "app/controllers/#{str}_controller.rb",
|
251
|
+
"#{@controller_path}/#{str}_controller.rb"
|
252
|
+
write_helper(str)
|
253
|
+
end
|
254
|
+
|
255
|
+
def write_helper(str)
|
256
|
+
@m.template "app/helpers/#{str}_helper.rb",
|
257
|
+
"#{@helper_path}/#{str}_helper.rb"
|
258
|
+
end
|
259
|
+
|
260
|
+
def write_routes_file(routes)
|
261
|
+
sentinel = 'ActionController::Routing::Routes.draw do |map|'
|
262
|
+
|
263
|
+
@m.gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
|
264
|
+
"#{match}\n #{routes}\n"
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def write_init_file(sentinel, str)
|
269
|
+
@m.gsub_file 'lib/lockdown/init.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
|
270
|
+
"#{match}\n #{str}"
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
end
|