lockdown 0.4.6 → 0.5.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 (48) hide show
  1. data/Manifest.txt +39 -0
  2. data/lib/lockdown/controller.rb +3 -3
  3. data/lib/lockdown/system.rb +1 -5
  4. data/lib/lockdown/version.rb +2 -2
  5. data/rails_generators/lockdown/USAGE +5 -0
  6. data/rails_generators/lockdown/lockdown_generator.rb +221 -0
  7. data/rails_generators/lockdown/templates/app/controllers/permissions_controller.rb +22 -0
  8. data/rails_generators/lockdown/templates/app/controllers/sessions_controller.rb +38 -0
  9. data/rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb +113 -0
  10. data/rails_generators/lockdown/templates/app/controllers/users_controller.rb +124 -0
  11. data/rails_generators/lockdown/templates/app/helpers/permissions_helper.rb +13 -0
  12. data/rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb +35 -0
  13. data/rails_generators/lockdown/templates/app/helpers/users_helper.rb +78 -0
  14. data/rails_generators/lockdown/templates/app/models/permission.rb +13 -0
  15. data/rails_generators/lockdown/templates/app/models/profile.rb +10 -0
  16. data/rails_generators/lockdown/templates/app/models/user.rb +72 -0
  17. data/rails_generators/lockdown/templates/app/models/user_group.rb +15 -0
  18. data/rails_generators/lockdown/templates/app/views/permissions/_data.html.erb +13 -0
  19. data/rails_generators/lockdown/templates/app/views/permissions/index.html.erb +16 -0
  20. data/rails_generators/lockdown/templates/app/views/permissions/show.html.erb +3 -0
  21. data/rails_generators/lockdown/templates/app/views/sessions/new.html.erb +12 -0
  22. data/rails_generators/lockdown/templates/app/views/user_groups/_data.html.erb +44 -0
  23. data/rails_generators/lockdown/templates/app/views/user_groups/_form.html.erb +11 -0
  24. data/rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb +6 -0
  25. data/rails_generators/lockdown/templates/app/views/user_groups/index.html.erb +20 -0
  26. data/rails_generators/lockdown/templates/app/views/user_groups/new.html.erb +5 -0
  27. data/rails_generators/lockdown/templates/app/views/user_groups/show.html.erb +6 -0
  28. data/rails_generators/lockdown/templates/app/views/users/_data.html.erb +62 -0
  29. data/rails_generators/lockdown/templates/app/views/users/_form.html.erb +18 -0
  30. data/rails_generators/lockdown/templates/app/views/users/_password.html.erb +5 -0
  31. data/rails_generators/lockdown/templates/app/views/users/edit.html.erb +6 -0
  32. data/rails_generators/lockdown/templates/app/views/users/index.html.erb +22 -0
  33. data/rails_generators/lockdown/templates/app/views/users/new.html.erb +5 -0
  34. data/rails_generators/lockdown/templates/app/views/users/show.html.erb +4 -0
  35. data/rails_generators/lockdown/templates/db/migrate/create_admin_user_and_user_group.rb +19 -0
  36. data/rails_generators/lockdown/templates/db/migrate/create_permissions.rb +19 -0
  37. data/rails_generators/lockdown/templates/db/migrate/create_profiles.rb +26 -0
  38. data/rails_generators/lockdown/templates/db/migrate/create_user_groups.rb +19 -0
  39. data/rails_generators/lockdown/templates/db/migrate/create_users.rb +17 -0
  40. data/rails_generators/lockdown_all/lockdown_all_generator.rb +0 -2
  41. data/test/test_generator_helper.rb +10 -1
  42. data/test/test_lockdown_generator.rb +11 -9
  43. data/website/generator.html +243 -0
  44. data/website/generator.txt +174 -0
  45. data/website/index.html +331 -0
  46. data/website/index.txt +62 -26
  47. data/website/model.jpg +0 -0
  48. metadata +42 -2
data/Manifest.txt CHANGED
@@ -21,6 +21,41 @@ lib/lockdown/model.rb
21
21
  lib/lockdown/system.rb
22
22
  lib/lockdown/version.rb
23
23
  lib/lockdown/view.rb
24
+ rails_generators/lockdown/USAGE
25
+ rails_generators/lockdown/lockdown_generator.rb
26
+ rails_generators/lockdown/templates/app/controllers/permissions_controller.rb
27
+ rails_generators/lockdown/templates/app/controllers/sessions_controller.rb
28
+ rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb
29
+ rails_generators/lockdown/templates/app/controllers/users_controller.rb
30
+ rails_generators/lockdown/templates/app/helpers/permissions_helper.rb
31
+ rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb
32
+ rails_generators/lockdown/templates/app/helpers/users_helper.rb
33
+ rails_generators/lockdown/templates/app/models/permission.rb
34
+ rails_generators/lockdown/templates/app/models/profile.rb
35
+ rails_generators/lockdown/templates/app/models/user.rb
36
+ rails_generators/lockdown/templates/app/models/user_group.rb
37
+ rails_generators/lockdown/templates/app/views/permissions/_data.html.erb
38
+ rails_generators/lockdown/templates/app/views/permissions/index.html.erb
39
+ rails_generators/lockdown/templates/app/views/permissions/show.html.erb
40
+ rails_generators/lockdown/templates/app/views/sessions/new.html.erb
41
+ rails_generators/lockdown/templates/app/views/user_groups/_data.html.erb
42
+ rails_generators/lockdown/templates/app/views/user_groups/_form.html.erb
43
+ rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb
44
+ rails_generators/lockdown/templates/app/views/user_groups/index.html.erb
45
+ rails_generators/lockdown/templates/app/views/user_groups/new.html.erb
46
+ rails_generators/lockdown/templates/app/views/user_groups/show.html.erb
47
+ rails_generators/lockdown/templates/app/views/users/_data.html.erb
48
+ rails_generators/lockdown/templates/app/views/users/_form.html.erb
49
+ rails_generators/lockdown/templates/app/views/users/_password.html.erb
50
+ rails_generators/lockdown/templates/app/views/users/edit.html.erb
51
+ rails_generators/lockdown/templates/app/views/users/index.html.erb
52
+ rails_generators/lockdown/templates/app/views/users/new.html.erb
53
+ rails_generators/lockdown/templates/app/views/users/show.html.erb
54
+ rails_generators/lockdown/templates/db/migrate/create_admin_user_and_user_group.rb
55
+ rails_generators/lockdown/templates/db/migrate/create_permissions.rb
56
+ rails_generators/lockdown/templates/db/migrate/create_profiles.rb
57
+ rails_generators/lockdown/templates/db/migrate/create_user_groups.rb
58
+ rails_generators/lockdown/templates/db/migrate/create_users.rb
24
59
  rails_generators/lockdown_all/USAGE
25
60
  rails_generators/lockdown_all/lockdown_all_generator.rb
26
61
  rails_generators/lockdown_all/templates/app/controllers/permissions_controller.rb
@@ -70,7 +105,11 @@ test/test_lockdown.rb
70
105
  test/test_lockdown_all_generator.rb
71
106
  test/test_lockdown_generator.rb
72
107
  test/test_lockdown_models_generator.rb
108
+ website/generator.html
109
+ website/generator.txt
110
+ website/index.html
73
111
  website/index.txt
74
112
  website/javascripts/rounded_corners_lite.inc.js
113
+ website/model.jpg
75
114
  website/stylesheets/screen.css
76
115
  website/template.html.erb
@@ -47,7 +47,7 @@ module Lockdown
47
47
  if session[:expiry_time] && session[:expiry_time] < Time.now
48
48
  nil_lockdown_values
49
49
  end
50
- session[:expiry_time] = Time.now + Lockdown::System[:session_timeout]
50
+ session[:expiry_time] = Time.now + Lockdown::System.fetch(:session_timeout)
51
51
  end
52
52
 
53
53
  def store_location
@@ -189,13 +189,13 @@ module Lockdown
189
189
  end
190
190
 
191
191
  def access_denied(e)
192
- if Lockdown::System[:logout_on_access_violation]
192
+ if Lockdown::System.fetch(:logout_on_access_violation)
193
193
  reset_session
194
194
  end
195
195
  respond_to do |accepts|
196
196
  accepts.html do
197
197
  store_location
198
- send_to Lockdown::System[:access_denied_path]
198
+ send_to Lockdown::System.fetch(:access_denied_path)
199
199
  end
200
200
  accepts.xml do
201
201
  headers["Status"] = "Unauthorized"
@@ -27,14 +27,10 @@ module Lockdown
27
27
  end
28
28
  end
29
29
 
30
- def [](key)
30
+ def fetch(key)
31
31
  (@options||={})[key]
32
32
  end
33
33
 
34
- def []=(key,val)
35
- @options[key] = val
36
- end
37
-
38
34
  def set_permission(name, *method_arrays)
39
35
  @permissions[name] ||= []
40
36
  method_arrays.each{|ary| @permissions[name] += ary}
@@ -1,8 +1,8 @@
1
1
  module Lockdown #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 4
5
- TINY = 6
4
+ MINOR = 5
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -0,0 +1,5 @@
1
+ Description:
2
+
3
+
4
+ Usage:
5
+
@@ -0,0 +1,221 @@
1
+ class LockdownGenerator < Rails::Generator::Base
2
+ attr_accessor :file_name
3
+
4
+ def manifest
5
+ record do |m|
6
+ # Ensure appropriate folder(s) exists
7
+ m.directory 'app/helpers'
8
+ m.directory 'app/views'
9
+ m.directory 'app/controllers'
10
+
11
+ if options[:all]
12
+ options[:management] = true
13
+ options[:login] = true
14
+ end
15
+
16
+ add_management(m) if options[:management]
17
+
18
+ add_login(m) if options[:login]
19
+
20
+ add_models(m)
21
+ end #record do |m|
22
+ end
23
+
24
+ protected
25
+
26
+ def add_management(m)
27
+ m.directory 'app/views/users'
28
+ m.directory 'app/views/user_groups'
29
+ m.directory 'app/views/permissions'
30
+
31
+ m.file "app/controllers/permissions_controller.rb",
32
+ "app/controllers/permissions_controller.rb"
33
+
34
+ m.file "app/controllers/users_controller.rb",
35
+ "app/controllers/users_controller.rb"
36
+
37
+ m.file "app/controllers/user_groups_controller.rb",
38
+ "app/controllers/user_groups_controller.rb"
39
+
40
+ m.file "app/helpers/permissions_helper.rb",
41
+ "app/helpers/permissions_helper.rb"
42
+
43
+ m.file "app/helpers/users_helper.rb",
44
+ "app/helpers/users_helper.rb"
45
+
46
+ m.file "app/helpers/user_groups_helper.rb",
47
+ "app/helpers/user_groups_helper.rb"
48
+
49
+ copy_views(m, "users")
50
+
51
+ m.file "app/views/users/_password.html.erb",
52
+ "app/views/users/_password.html.erb"
53
+
54
+ copy_views(m, "user_groups")
55
+
56
+ m.file "app/views/permissions/_data.html.erb",
57
+ "app/views/permissions/_data.html.erb"
58
+
59
+ m.file "app/views/permissions/index.html.erb",
60
+ "app/views/permissions/index.html.erb"
61
+
62
+ m.file "app/views/permissions/show.html.erb",
63
+ "app/views/permissions/show.html.erb"
64
+
65
+
66
+ m.route_resources "permissions"
67
+ m.route_resources "user_groups"
68
+ m.route_resources "users"
69
+
70
+ add_management_permissions(m)
71
+ end
72
+
73
+ def add_login(m)
74
+ m.directory 'app/views/sessions'
75
+
76
+ m.file "app/controllers/sessions_controller.rb",
77
+ "app/controllers/sessions_controller.rb"
78
+
79
+ m.file "app/views/sessions/new.html.erb",
80
+ "app/views/sessions/new.html.erb"
81
+
82
+ m.route_resources "sessions"
83
+
84
+ add_login_permissions(m)
85
+ add_login_routes(m)
86
+ end
87
+
88
+ def add_models(m)
89
+ m.directory 'app/models'
90
+
91
+ m.file "app/models/permission.rb",
92
+ "app/models/permission.rb"
93
+
94
+ m.file "app/models/user.rb",
95
+ "app/models/user.rb"
96
+
97
+ m.file "app/models/user_group.rb",
98
+ "app/models/user_group.rb"
99
+
100
+ m.file "app/models/profile.rb",
101
+ "app/models/profile.rb"
102
+
103
+ add_migrations(m) unless options[:no_migrations]
104
+ end
105
+
106
+ def add_migrations(m)
107
+ begin
108
+ m.migration_template "db/migrate/create_profiles.rb", "db/migrate",
109
+ :migration_file_name => "create_profiles"
110
+ rescue
111
+ puts "Profiles migration exists"
112
+ end
113
+
114
+ begin
115
+ m.migration_template "db/migrate/create_users.rb", "db/migrate",
116
+ :migration_file_name => "create_users"
117
+ rescue
118
+ puts "Users migration exists"
119
+ end
120
+
121
+ begin
122
+ m.migration_template "db/migrate/create_user_groups.rb", "db/migrate",
123
+ :migration_file_name => "create_user_groups"
124
+ rescue
125
+ puts "User Groups migration exists"
126
+ end
127
+
128
+ begin
129
+ m.migration_template "db/migrate/create_permissions.rb", "db/migrate",
130
+ :migration_file_name => "create_permissions"
131
+ rescue
132
+ puts "Permissions migration exists"
133
+ end
134
+
135
+ begin
136
+ m.migration_template "db/migrate/create_admin_user_and_user_group.rb",
137
+ "db/migrate",
138
+ :migration_file_name => "create_admin_user_and_user_group"
139
+ rescue
140
+ puts "Admin User Group... migration exists"
141
+ end
142
+ end # add_migrations
143
+
144
+ def copy_views(m, vw)
145
+ m.file "app/views/#{vw}/_data.html.erb", "app/views/#{vw}/_data.html.erb"
146
+ m.file "app/views/#{vw}/_form.html.erb", "app/views/#{vw}/_form.html.erb"
147
+ m.file "app/views/#{vw}/index.html.erb", "app/views/#{vw}/index.html.erb"
148
+ m.file "app/views/#{vw}/show.html.erb", "app/views/#{vw}/show.html.erb"
149
+ m.file "app/views/#{vw}/edit.html.erb", "app/views/#{vw}/edit.html.erb"
150
+ m.file "app/views/#{vw}/new.html.erb", "app/views/#{vw}/new.html.erb"
151
+ end
152
+
153
+ def add_login_permissions(m)
154
+ add_permissions m, "set_permission :sessions_management, all_methods(:sessions)"
155
+
156
+ add_predefined_user_group m, "set_public_access :sessions_management"
157
+ end
158
+
159
+ def add_management_permissions(m)
160
+ perms = []
161
+ perms << "set_permission :users_management, all_methods(:users)"
162
+ perms << "set_permission :user_groups_management, all_methods(:user_groups)"
163
+ perms << "set_permission :permissions_management, all_methods(:permissions)"
164
+ perms << "set_permission :my_account, only_methods(:users, :edit, :update, :show)"
165
+
166
+ add_permissions m, perms.join("\n ")
167
+
168
+ add_predefined_user_group m, "set_protected_access :my_account"
169
+ end
170
+
171
+ def add_permissions(m, str)
172
+ sentinel = '# Define your permissions here:'
173
+ m.gsub_file 'lib/lockdown/init.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
174
+ "#{match}\n #{str}"
175
+ end
176
+ end
177
+
178
+ def add_predefined_user_group(m, str)
179
+ sentinel = '# Define the built-in user groups here:'
180
+ m.gsub_file 'lib/lockdown/init.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
181
+ "#{match}\n #{str}"
182
+ end
183
+ end
184
+
185
+ def add_login_routes(m)
186
+ home = %Q(map.home '', :controller => 'sessions', :action => 'new')
187
+ login = %Q(map.login '/login', :controller => 'sessions', :action => 'new')
188
+ logout =%Q(map.logout '/logout', :controller => 'sessions', :action => 'destroy')
189
+
190
+ sentinel = 'ActionController::Routing::Routes.draw do |map|'
191
+
192
+ m.gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
193
+ "#{match}\n #{home}\n\n #{login}\n\n #{logout}\n"
194
+ end
195
+ end
196
+
197
+ def banner
198
+ <<-EOS
199
+ Installs the lockdown framework to managing users user_groups
200
+ and viewing permissions. Also includes a login screen.
201
+
202
+ USAGE: #{$0} #{spec.name}
203
+ EOS
204
+ end
205
+
206
+ def add_options!(opt)
207
+ opt.separator ''
208
+ opt.separator 'Options:'
209
+ opt.on("--all",
210
+ "Install all Lockdown templates") { |v| options[:all] = v }
211
+ opt.on("--models",
212
+ "Install only models and migrations (skip migrations by --no_migrations).") { |v| options[:models] = v }
213
+ opt.on("--management",
214
+ "Install management functionality. Which is --all minus --login. All models (migrations) included. ") { |v| options[:management] = v }
215
+ opt.on("--login",
216
+ "Install login functionality. Which is --all minus --management. All models (migrations) included. ") { |v| options[:login] = v }
217
+ opt.on("--no_migrations",
218
+ "Skip migrations installation") { |v| options[:no_migrations] = v }
219
+ end
220
+
221
+ end
@@ -0,0 +1,22 @@
1
+ class PermissionsController < ApplicationController
2
+ # GET /permissions
3
+ # GET /permissions.xml
4
+ def index
5
+ @permissions = Permission.find(:all)
6
+
7
+ respond_to do |format|
8
+ format.html # index.html.erb
9
+ format.xml { render :xml => @permissions }
10
+ end
11
+ end
12
+
13
+ # GET /permissions/1
14
+ # GET /permissions/1.xml
15
+ def show
16
+ @permission = Permission.find(params[:id])
17
+ respond_to do |format|
18
+ format.html # show.html.erb
19
+ format.xml { render :xml => @permission }
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,38 @@
1
+ # This controller handles the login/logout function of the site.
2
+ class SessionsController < ApplicationController
3
+ def new
4
+ #Stub required for Lockdown to grant access
5
+ end
6
+
7
+ def create
8
+ password_authentication(params[:login], params[:password])
9
+ end
10
+
11
+ def destroy
12
+ logger.info "resetting session in sessions controller"
13
+ reset_session
14
+ flash[:notice] = "You have been logged out."
15
+ redirect_back_or_default('/')
16
+ end
17
+
18
+ protected
19
+
20
+ def password_authentication(login, password)
21
+ set_session_user(User.authenticate(login, password))
22
+ if logged_in?
23
+ successful_login
24
+ else
25
+ failed_login
26
+ end
27
+ end
28
+
29
+ def failed_login(message = 'Authentication failed.')
30
+ flash[:error] = message
31
+ redirect_back_or_default login_url
32
+ end
33
+
34
+ def successful_login
35
+ flash[:notice] = "Logged in successfully"
36
+ redirect_back_or_default Lockdown::System.fetch(:successful_login_path)
37
+ end
38
+ end
@@ -0,0 +1,113 @@
1
+ class UserGroupsController < ApplicationController
2
+ before_filter :find_user_group, :only => [:show, :edit, :update, :destroy]
3
+ after_filter :update_permissions, :only => [:create, :update]
4
+
5
+ # GET /user_groups
6
+ # GET /user_groups.xml
7
+ def index
8
+ @user_groups = UserGroup.find(:all)
9
+
10
+ respond_to do |format|
11
+ format.html # index.html.erb
12
+ format.xml { render :xml => @user_groups }
13
+ end
14
+ end
15
+
16
+ # GET /user_groups/1
17
+ # GET /user_groups/1.xml
18
+ def show
19
+ respond_to do |format|
20
+ format.html # show.html.erb
21
+ format.xml { render :xml => @user_group }
22
+ end
23
+ end
24
+
25
+ # GET /user_groups/new
26
+ # GET /user_groups/new.xml
27
+ def new
28
+ @user_group = UserGroup.new
29
+ @all_permissions = Lockdown::System.permissions_assignable_for_user(current_user)
30
+
31
+ respond_to do |format|
32
+ format.html # new.html.erb
33
+ format.xml { render :xml => @user_group }
34
+ end
35
+ end
36
+
37
+ # GET /user_groups/1/edit
38
+ def edit
39
+ @all_permissions = Lockdown::System.permissions_assignable_for_user(current_user)
40
+ end
41
+
42
+ # POST /user_groups
43
+ # POST /user_groups.xml
44
+ def create
45
+ @user_group = UserGroup.new(params[:user_group])
46
+
47
+ respond_to do |format|
48
+ if @user_group.save
49
+ flash[:notice] = 'UserGroup was successfully created.'
50
+ format.html { redirect_to(@user_group) }
51
+ format.xml { render :xml => @user_group, :status => :created, :location => @user_group }
52
+ else
53
+ @all_permissions = Lockdown::System.permissions_assignable_for_user(current_user)
54
+ format.html { render :action => "new" }
55
+ format.xml { render :xml => @user_group.errors, :status => :unprocessable_entity }
56
+ end
57
+ end
58
+ end
59
+
60
+ # PUT /user_groups/1
61
+ # PUT /user_groups/1.xml
62
+ def update
63
+ respond_to do |format|
64
+ if @user_group.update_attributes(params[:user_group])
65
+ flash[:notice] = 'UserGroup was successfully updated.'
66
+ format.html { redirect_to(@user_group) }
67
+ format.xml { head :ok }
68
+ else
69
+ @all_permissions = Lockdown::System.permissions_assignable_for_user(current_user)
70
+ format.html { render :action => "edit" }
71
+ format.xml { render :xml => @user_group.errors, :status => :unprocessable_entity }
72
+ end
73
+ end
74
+ end
75
+
76
+ # DELETE /user_groups/1
77
+ # DELETE /user_groups/1.xml
78
+ def destroy
79
+ @user_group.destroy
80
+
81
+ respond_to do |format|
82
+ format.html { redirect_to(user_groups_url) }
83
+ format.xml { head :ok }
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ def find_user_group
90
+ @user_group = UserGroup.find(params[:id])
91
+ if @action_name != "show" && Lockdown::System.has_user_group?(@user_group)
92
+ raise SecurityError,"Invalid attempt to modify user group."
93
+ end
94
+ end
95
+
96
+ def update_permissions
97
+ new_perm_ids = params.collect{|p| p[0].split("_")[1].to_i if p[0] =~ /^perm_/}.compact
98
+ #
99
+ # Removed previously associated permissions if not checked this time.
100
+ #
101
+ @user_group.permissions.dup.each do |p|
102
+ @user_group.permissions.delete(p) unless new_perm_ids.include?(p.id)
103
+ end
104
+
105
+ #
106
+ # Add in the new permissions
107
+ #
108
+ new_perm_ids.each do |id|
109
+ next if @user_group.permission_ids.include?(id)
110
+ @user_group.permissions << Permission.find(id)
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,124 @@
1
+ class UsersController < ApplicationController
2
+ before_filter :find_user, :only => [:show, :edit, :update, :destroy]
3
+ after_filter :update_user_groups, :only => [:create, :update]
4
+ # GET /users
5
+ # GET /users.xml
6
+ def index
7
+ @users = User.find :all, :include => [:profile, :user_groups]
8
+ respond_to do |format|
9
+ format.html # index.html.erb
10
+ format.xml { render :xml => @users }
11
+ end
12
+ end
13
+
14
+ # GET /users/1
15
+ # GET /users/1.xml
16
+ def show
17
+ respond_to do |format|
18
+ format.html # show.html.erb
19
+ format.xml { render :xml => @user }
20
+ end
21
+ end
22
+
23
+ # GET /users/new
24
+ # GET /users/new.xml
25
+ def new
26
+ @user = User.new
27
+ @profile = Profile.new
28
+ @user_groups_for_user = Lockdown::System.user_groups_assignable_for_user(current_user)
29
+ respond_to do |format|
30
+ format.html # new.html.erb
31
+ format.xml { render :xml => @user }
32
+ end
33
+ end
34
+
35
+ # GET /users/1/edit
36
+ def edit
37
+ @user_groups_for_user = Lockdown::System.user_groups_assignable_for_user(current_user)
38
+ end
39
+
40
+ # POST /users
41
+ # POST /users.xml
42
+ def create
43
+ @user = User.new(params[:user])
44
+ @profile = Profile.new(params[:profile])
45
+
46
+ @user.profile = @profile
47
+ if @user.save
48
+ flash[:notice] = "Thanks for signing up!"
49
+ redirect_to(users_path)
50
+ else
51
+ @user_groups_for_user = Lockdown::System.user_groups_assignable_for_user(current_user)
52
+ flash[:error] = "Please correct the following issues"
53
+ render :action => "new"
54
+ end
55
+ end
56
+
57
+ # PUT /users/1
58
+ # PUT /users/1.xml
59
+ def update
60
+ @user.profile.attributes = params[:profile]
61
+ @user.attributes = params[:user]
62
+
63
+ respond_to do |format|
64
+ if @user.save
65
+ flash[:notice] = 'User was successfully updated.'
66
+ format.html { redirect_to(@user) }
67
+ format.xml { head :ok }
68
+ else
69
+ @user_groups_for_user = Lockdown::System.user_groups_assignable_for_user(current_user)
70
+ format.html { render :action => "edit" }
71
+ format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
72
+ end
73
+ end
74
+ end
75
+
76
+ # DELETE /users/1
77
+ # DELETE /users/1.xml
78
+ def destroy
79
+ @user.destroy
80
+
81
+ respond_to do |format|
82
+ format.html { redirect_to(users_url) }
83
+ format.xml { head :ok }
84
+ end
85
+ end
86
+
87
+ def change_password
88
+ render :update do |page|
89
+ page.replace_html 'password', :partial => 'password'
90
+ end
91
+ end
92
+
93
+ private
94
+
95
+ def find_user
96
+ # Skip test if current user is an administrator
97
+ unless current_user_is_admin?
98
+ # Raise error if id not = current logged in user
99
+ raise SecurityError.new if (current_user_id != params[:id].to_i)
100
+ end
101
+ @user = User.find(params[:id])
102
+ raise SecurityError.new if @user.nil?
103
+ @profile = @user.profile
104
+ end
105
+
106
+ def update_user_groups
107
+ new_ug_ids = params.collect{|p| p[0].split("_")[1].to_i if p[0] =~ /^ug_/}.compact
108
+ #
109
+ # Removed previously associated user_groups if not checked this time.
110
+ #
111
+ @user.user_groups.dup.each do |g|
112
+ #Don't remove the automatically assigned user groups
113
+ next if Lockdown::System.has_user_group?(g)
114
+ @user.user_groups.delete(g) unless new_ug_ids.include?(g.id)
115
+ end
116
+ #
117
+ # Add in the new permissions
118
+ #
119
+ new_ug_ids.each do |id|
120
+ next if @user.user_group_ids.include?(id)
121
+ @user.user_groups << UserGroup.find(id)
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,13 @@
1
+ module PermissionsHelper
2
+ def permission_name_value
3
+ h @permission.name
4
+ end
5
+
6
+ def permission_access_rights_value
7
+ Lockdown::System.access_rights_for_permission(@permission).collect{|r| r}.join("<br/>")
8
+ end
9
+
10
+ def permission_users_value
11
+ @permission.all_users.collect{|u| link_to_or_show(u.full_name, u)}.join("<br/>")
12
+ end
13
+ end
@@ -0,0 +1,35 @@
1
+ module UserGroupsHelper
2
+ def user_group_name_value
3
+ if @action_name == "show"
4
+ h @user_group.name
5
+ else
6
+ text_field_tag "user_group[name]", @user_group.name
7
+ end
8
+ end
9
+
10
+ def user_group_permissions_value
11
+ if @action_name == "show"
12
+ @user_group.permissions.collect{|p| p.name + "<br/>"}
13
+ else
14
+ rvalue = %{<ul id="all_permissions" class="checklist">}
15
+ @all_permissions.each_with_index do |perm,i|
16
+ bg = ( i % 2 == 0 ) ? "even" : "odd"
17
+ input_id = "perm_#{perm.id}"
18
+ checked = (@user_group.permission_ids.include?(perm.id) ? "checked" : "")
19
+ bg << "_" << checked if checked.length > 0
20
+ rvalue << <<-HTML
21
+ <li class="#{bg}">
22
+ <label id="lbl_#{input_id}" for="#{input_id}" onclick="do_highlight('#{input_id}')">
23
+ <input id="#{input_id}" name="#{input_id}" type="checkbox" #{checked}/>&nbsp;&nbsp;#{perm.name}
24
+ </label>
25
+ </li>
26
+ HTML
27
+ end
28
+ rvalue << "</ul>"
29
+ end
30
+ end
31
+
32
+ def user_group_users_value
33
+ @user_group.all_users.collect{|u| link_to_or_show(u.full_name, u)}.join("<br/>")
34
+ end
35
+ end