lockdown_vail 1.6.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/.gitignore +6 -0
  2. data/README.txt +36 -0
  3. data/Rakefile +38 -0
  4. data/VERSION +1 -0
  5. data/lib/lockdown/context.rb +41 -0
  6. data/lib/lockdown/database.rb +41 -0
  7. data/lib/lockdown/errors.rb +11 -0
  8. data/lib/lockdown/frameworks/rails/controller.rb +187 -0
  9. data/lib/lockdown/frameworks/rails/view.rb +50 -0
  10. data/lib/lockdown/frameworks/rails.rb +114 -0
  11. data/lib/lockdown/helper.rb +111 -0
  12. data/lib/lockdown/orms/active_record.rb +68 -0
  13. data/lib/lockdown/permission.rb +222 -0
  14. data/lib/lockdown/references.rb +19 -0
  15. data/lib/lockdown/rspec_helper.rb +114 -0
  16. data/lib/lockdown/rules.rb +372 -0
  17. data/lib/lockdown/session.rb +66 -0
  18. data/lib/lockdown/system.rb +58 -0
  19. data/lib/lockdown.rb +87 -0
  20. data/lockdown.gemspec +118 -0
  21. data/lockdown_vail.gemspec +120 -0
  22. data/rails_generators/lockdown/lockdown_generator.rb +274 -0
  23. data/rails_generators/lockdown/templates/app/controllers/permissions_controller.rb +22 -0
  24. data/rails_generators/lockdown/templates/app/controllers/sessions_controller.rb +39 -0
  25. data/rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb +122 -0
  26. data/rails_generators/lockdown/templates/app/controllers/users_controller.rb +117 -0
  27. data/rails_generators/lockdown/templates/app/helpers/permissions_helper.rb +2 -0
  28. data/rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb +2 -0
  29. data/rails_generators/lockdown/templates/app/helpers/users_helper.rb +2 -0
  30. data/rails_generators/lockdown/templates/app/models/permission.rb +13 -0
  31. data/rails_generators/lockdown/templates/app/models/profile.rb +10 -0
  32. data/rails_generators/lockdown/templates/app/models/user.rb +95 -0
  33. data/rails_generators/lockdown/templates/app/models/user_group.rb +15 -0
  34. data/rails_generators/lockdown/templates/app/views/permissions/index.html.erb +16 -0
  35. data/rails_generators/lockdown/templates/app/views/permissions/show.html.erb +26 -0
  36. data/rails_generators/lockdown/templates/app/views/sessions/new.html.erb +12 -0
  37. data/rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb +33 -0
  38. data/rails_generators/lockdown/templates/app/views/user_groups/index.html.erb +20 -0
  39. data/rails_generators/lockdown/templates/app/views/user_groups/new.html.erb +31 -0
  40. data/rails_generators/lockdown/templates/app/views/user_groups/show.html.erb +29 -0
  41. data/rails_generators/lockdown/templates/app/views/users/edit.html.erb +51 -0
  42. data/rails_generators/lockdown/templates/app/views/users/index.html.erb +22 -0
  43. data/rails_generators/lockdown/templates/app/views/users/new.html.erb +50 -0
  44. data/rails_generators/lockdown/templates/app/views/users/show.html.erb +33 -0
  45. data/rails_generators/lockdown/templates/config/initializers/lockit.rb +1 -0
  46. data/rails_generators/lockdown/templates/db/migrate/create_admin_user.rb +17 -0
  47. data/rails_generators/lockdown/templates/db/migrate/create_permissions.rb +19 -0
  48. data/rails_generators/lockdown/templates/db/migrate/create_profiles.rb +26 -0
  49. data/rails_generators/lockdown/templates/db/migrate/create_user_groups.rb +19 -0
  50. data/rails_generators/lockdown/templates/db/migrate/create_users.rb +17 -0
  51. data/rails_generators/lockdown/templates/lib/lockdown/README +42 -0
  52. data/rails_generators/lockdown/templates/lib/lockdown/init.rb +136 -0
  53. data/spec/lockdown/context_spec.rb +191 -0
  54. data/spec/lockdown/database_spec.rb +66 -0
  55. data/spec/lockdown/frameworks/rails/controller_spec.rb +240 -0
  56. data/spec/lockdown/frameworks/rails/view_spec.rb +87 -0
  57. data/spec/lockdown/frameworks/rails_spec.rb +163 -0
  58. data/spec/lockdown/permission_spec.rb +156 -0
  59. data/spec/lockdown/rspec_helper_spec.rb +41 -0
  60. data/spec/lockdown/rules_spec.rb +245 -0
  61. data/spec/lockdown/session_spec.rb +125 -0
  62. data/spec/lockdown/system_spec.rb +51 -0
  63. data/spec/lockdown_spec.rb +19 -0
  64. data/spec/rcov.opts +5 -0
  65. data/spec/spec.opts +3 -0
  66. data/spec/spec_helper.rb +8 -0
  67. metadata +140 -0
@@ -0,0 +1,16 @@
1
+ <h1>Listing Permissions</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Name</th>
6
+ </tr>
7
+
8
+ <%% for permission in @permissions %>
9
+ <tr>
10
+ <td><%%=h permission.name %></td>
11
+ <td><%%= link_to 'Show', <%= namespace.blank? ? 'permission_path(permission)' : "#{namespace}_permission_path(permission)" %> %></td>
12
+ </tr>
13
+ <%% end %>
14
+ </table>
15
+
16
+ <br />
@@ -0,0 +1,26 @@
1
+ <p>
2
+ <b>Name</b><br />
3
+ <%%= h @permission.name %>
4
+ </p>
5
+ <p>
6
+ <b>Access rights:</b><br />
7
+ <%%
8
+ Lockdown::System.access_rights_for_permission(@permission).each do |access_right|
9
+ %>
10
+ <%%= access_right %><br/>
11
+ <%%
12
+ end
13
+ %>
14
+ </p>
15
+ <p>
16
+ <b>Users with permission:</b><br />
17
+ <%%
18
+ @permission.all_users.each do |user|
19
+ %>
20
+ <%%= link_to_or_show(user.full_name, <%= namespace.blank? ? 'user' : "#{namespace}_user_path(user)" %>) %><br/>
21
+ <%%
22
+ end
23
+ %>
24
+ </p>
25
+
26
+ <%%= link_to 'Back', <%= namespace.blank? ? 'permissions_path' : "#{namespace}_permissions_path" %> %>
@@ -0,0 +1,12 @@
1
+ <%%= flash[:notice] if flash[:notice] %>
2
+ <%%= flash[:error] if flash[:error] %>
3
+
4
+ <%% form_tag sessions_path do -%>
5
+ <p><label for="login">Login</label><br/>
6
+ <%%= text_field_tag 'login' %></p>
7
+
8
+ <p><label for="password">Password</label><br/>
9
+ <%%= password_field_tag 'password' %></p>
10
+
11
+ <p><%%= submit_tag 'Log in' %></p>
12
+ <%% end -%>
@@ -0,0 +1,33 @@
1
+ <h1>Editing User Group</h1>
2
+
3
+ <%% form_for(<%= namespace.blank? ? '@user_group' : "[:#{namespace}, @user_group]" %>) do |f| %>
4
+ <%%= f.error_messages %>
5
+ <p>
6
+ <b>Name</b><br />
7
+ <%%= f.text_field :name %>
8
+ </p>
9
+ <p>
10
+ <b>Permissions</b><br />
11
+ <ul style="list-style: none;">
12
+ <%%
13
+ @all_permissions.each_with_index do |perm,i|
14
+ input_id = "perm_#{perm.id}"
15
+ checked = (@user_group.permission_ids.include?(perm.id) ? "checked" : "")
16
+ %>
17
+ <li id="li_<%%= input_id %>">
18
+ <label for="<%%= input_id %>">
19
+ <input id="<%%= input_id %>" name="<%%= input_id %>" type="checkbox" <%%= checked %>/>&nbsp;&nbsp;<%%= perm.name %>
20
+ </label>
21
+ </li>
22
+ <%%
23
+ end
24
+ %>
25
+ </ul>
26
+ </p>
27
+
28
+ <p> <%%= f.submit "Update" %> </p>
29
+ <%% end %>
30
+
31
+
32
+ <%%= link_to 'Show', <%= namespace.blank? ? '@user_group' : "#{namespace}_user_group_path(@user_group)" %> %> |
33
+ <%%= link_to 'Back', <%= namespace.blank? ? 'user_groups_path' : "#{namespace}_user_groups_path" %> %>
@@ -0,0 +1,20 @@
1
+ <h1>Listing User Groups</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Name</th>
6
+ </tr>
7
+
8
+ <%% for user_group in @user_groups %>
9
+ <tr>
10
+ <td><%%=h user_group.name %></td>
11
+ <td><%%= link_to 'Show', <%= namespace.blank? ? "user_group_path(user_group)" : "#{namespace}_user_group_path(user_group)" %> %></td>
12
+ <td><%%= link_to('Edit', <%= namespace.blank? ? "edit_user_group_path(user_group)" : "edit_#{namespace}_user_group_path(user_group)" %>) unless Lockdown::System.has_user_group?(user_group) %></td>
13
+ <td><%%= link_to('Destroy',<%= namespace.blank? ? "user_group_path(user_group)" : "#{namespace}_user_group_path(user_group)" %>, :confirm => 'Are you sure?', :method => :delete) unless Lockdown::System.has_user_group?(user_group) %></td>
14
+ </tr>
15
+ <%% end %>
16
+ </table>
17
+
18
+ <br />
19
+
20
+ <%%= link_to 'New User Group', <%= namespace.blank? ? "new_user_group_path" : "new_#{namespace}_user_group_path" %> %>
@@ -0,0 +1,31 @@
1
+ <h1>New User Group</h1>
2
+
3
+ <%% form_for(<%= namespace.blank? ? '@user_group' : "[:#{namespace}, @user_group]" %>) do |f| %>
4
+ <%%= f.error_messages %>
5
+ <p>
6
+ <b>Name</b><br />
7
+ <%%= f.text_field :name %>
8
+ </p>
9
+ <p>
10
+ <b>Permissions</b><br />
11
+ <ul style="list-style: none;">
12
+ <%%
13
+ @all_permissions.each_with_index do |perm,i|
14
+ input_id = "perm_#{perm.id}"
15
+ checked = (@user_group.permission_ids.include?(perm.id) ? "checked" : "")
16
+ %>
17
+ <li id="li_<%%= input_id %>">
18
+ <label for="<%%= input_id %>">
19
+ <input id="<%%= input_id %>" name="<%%= input_id %>" type="checkbox" <%%= checked %>/>&nbsp;&nbsp;<%%= perm.name %>
20
+ </label>
21
+ </li>
22
+ <%%
23
+ end
24
+ %>
25
+ </ul>
26
+ </p>
27
+
28
+ <p> <%%= f.submit "Create" %> </p>
29
+ <%% end %>
30
+
31
+ <%%= link_to 'Back', <%= namespace.blank? ? 'user_groups_path' : "#{namespace}_user_groups_path" %> %>
@@ -0,0 +1,29 @@
1
+ <p>
2
+ <b>Name</b><br />
3
+ <%%= h @user_group.name %>
4
+ </p>
5
+ <p>
6
+ <b>Permissions</b><br />
7
+ <%%
8
+ @user_group.permissions.each do |perm|
9
+ %>
10
+ <%%= perm.name %><br/>
11
+ <%%
12
+ end
13
+ %>
14
+ </p>
15
+ <p>
16
+ <b>Users in user group:</b><br />
17
+ <%%
18
+ @user_group.all_users.each do |user|
19
+ %>
20
+ <%%= link_to_or_show(user.full_name, <%= namespace.blank? ? 'user' : "#{namespace}_user_path(user)" %>) %><br/>
21
+ <%%
22
+ end
23
+ %>
24
+ </p>
25
+
26
+ <%% unless Lockdown::System.has_user_group?(@user_group) %>
27
+ <%%= link_to 'Edit', <%= namespace.blank? ? 'edit_user_group_path(@user_group)' : "edit_#{namespace}_user_group_path(@user_group)" %> %> |
28
+ <%% end %>
29
+ <%%= link_to 'Back', <%= namespace.blank? ? 'user_groups_path' : "#{namespace}_user_groups_path" %> %>
@@ -0,0 +1,51 @@
1
+ <h1>Editing User</h1>
2
+
3
+ <%% form_for(<%= namespace.blank? ? "@user" : "[:#{namespace}, @user]" %>) do |f| %>
4
+ <%%= f.error_messages %>
5
+ <p>
6
+ <b>First name</b><br />
7
+ <%%= f.text_field :first_name %>
8
+ </p>
9
+ <p>
10
+ <b>Last name</b><br />
11
+ <%%= f.text_field :last_name %>
12
+ </p>
13
+ <p>
14
+ <b>Email</b><br />
15
+ <%%= f.text_field :email %>
16
+ </p>
17
+ <p>
18
+ <b>Login</b><br />
19
+ <%%= f.text_field :login %>
20
+ </p>
21
+ <p>
22
+ <b>Password</b><br />
23
+ <%%= f.password_field :password %>
24
+ </p>
25
+ <p>
26
+ <b>Password confirmation</b><br />
27
+ <%%= f.password_field :password_confirmation %>
28
+ </p>
29
+ <p>
30
+ <b>User Groups</b><br />
31
+ <ul style="list-style: none;">
32
+ <%%
33
+ @user_groups_for_user.each_with_index do |ug,i|
34
+ input_id = "ug_#{ug.id}"
35
+ checked = (@user.user_group_ids.include?(ug.id) ? "checked" : "")
36
+ %>
37
+ <li id="li_<%%= input_id %>">
38
+ <label for="<%%= input_id %>">
39
+ <input id="<%%= input_id %>" name="<%%= input_id %>" type="checkbox" <%%= checked %>/>&nbsp;&nbsp;<%%= ug.name %>
40
+ </label>
41
+ </li>
42
+ <%%
43
+ end
44
+ %>
45
+ </ul>
46
+ </p>
47
+ <p> <%%= f.submit "Update" %> </p>
48
+ <%% end %>
49
+
50
+ <%%= link_to 'Show', <%= namespace.blank? ? "user_path(@user)" : "#{namespace}_user_path(@user)" %> %> |
51
+ <%%= link_to 'Back', <%= namespace.blank? ? "users_path" : "#{namespace}_users_path" %> %>
@@ -0,0 +1,22 @@
1
+ <h1>Listing Users</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Login</th>
6
+ <th>Name</th>
7
+ </tr>
8
+
9
+ <%% @users.each do |user| %>
10
+ <tr>
11
+ <td><%%=h user.login %></td>
12
+ <td><%%=h user.full_name %></td>
13
+ <td><%%= link_to 'Show', <%= namespace.blank? ? "user_path(user)" : "#{namespace}_user_path(user)" %> %></td>
14
+ <td><%%= link_to 'Edit', <%= namespace.blank? ? "edit_user_path(user)" : "edit_#{namespace}_user_path(user)" %> %></td>
15
+ <td><%%= link_to 'Destroy', <%= namespace.blank? ? "user_path(user)" : "#{namespace}_user_path(user)" %>, :confirm => 'Are you sure?', :method => :delete %></td>
16
+ </tr>
17
+ <%% end %>
18
+ </table>
19
+
20
+ <br />
21
+
22
+ <%%= link_to 'New User', <%= namespace.blank? ? "new_user_path" : "new_#{namespace}_user_path" %> %>
@@ -0,0 +1,50 @@
1
+ <h1>New User</h1>
2
+
3
+ <%% form_for(<%= namespace.blank? ? "@user" : "[:#{namespace}, @user]" %>) do |f| %>
4
+ <%%= f.error_messages %>
5
+ <p>
6
+ <b>First name</b><br />
7
+ <%%= f.text_field :first_name %>
8
+ </p>
9
+ <p>
10
+ <b>Last name</b><br />
11
+ <%%= f.text_field :last_name %>
12
+ </p>
13
+ <p>
14
+ <b>Email</b><br />
15
+ <%%= f.text_field :email %>
16
+ </p>
17
+ <p>
18
+ <b>Login</b><br />
19
+ <%%= f.text_field :login %>
20
+ </p>
21
+ <p>
22
+ <b>Password</b><br />
23
+ <%%= f.password_field :password %>
24
+ </p>
25
+ <p>
26
+ <b>Password confirmation</b><br />
27
+ <%%= f.password_field :password_confirmation %>
28
+ </p>
29
+ <p>
30
+ <b>User Groups</b><br />
31
+ <ul style="list-style: none;">
32
+ <%%
33
+ @user_groups_for_user.each_with_index do |ug,i|
34
+ input_id = "ug_#{ug.id}"
35
+ checked = (@user.user_group_ids.include?(ug.id) ? "checked" : "")
36
+ %>
37
+ <li id="li_<%%= input_id %>">
38
+ <label for="<%%= input_id %>">
39
+ <input id="<%%= input_id %>" name="<%%= input_id %>" type="checkbox" <%%= checked %>/>&nbsp;&nbsp;<%%= ug.name %>
40
+ </label>
41
+ </li>
42
+ <%%
43
+ end
44
+ %>
45
+ </ul>
46
+ </p>
47
+ <p> <%%= f.submit "Create" %> </p>
48
+ <%% end %>
49
+
50
+ <%%= link_to 'Back', <%= namespace.blank? ? "users_path" : "#{namespace}_users_path" %> %>
@@ -0,0 +1,33 @@
1
+ <h1>Showing User</h1>
2
+
3
+ <p>
4
+ <b>First name</b><br />
5
+ <%%= h @user.first_name %>
6
+ </p>
7
+ <p>
8
+ <b>Last name</b><br />
9
+ <%%= h @user.last_name %>
10
+ </p>
11
+ <p>
12
+ <b>Email</b><br />
13
+ <%%= h @user.email %>
14
+ </p>
15
+ <p>
16
+ <b><span>L</span>ogin</b><br />
17
+ <%%= h @user.login %>
18
+ </p>
19
+ <p>
20
+ <b>User Groups</b><br />
21
+ <ul style="list-style: none;">
22
+ <%%
23
+ @user.user_groups.each do |ug|
24
+ %>
25
+ <%%= h ug.name %> <br/>
26
+ <%%
27
+ end
28
+ %>
29
+ </ul>
30
+ </p>
31
+
32
+ <%%= link_to 'Edit', <%= namespace.blank? ? "edit_user_path(@user)" : "edit_#{namespace}_user_path(@user)" %> %> |
33
+ <%%= link_to 'Back', <%= namespace.blank? ? "users_path" : "#{namespace}_users_path" %> %>
@@ -0,0 +1 @@
1
+ require 'lockdown'
@@ -0,0 +1,17 @@
1
+ class CreateAdminUser < ActiveRecord::Migration
2
+ def self.up
3
+ # TODO: Change the password
4
+ u = User.create(:password => "password",
5
+ :password_confirmation => "password",
6
+ :first_name => "Administrator",
7
+ :last_name => "User",
8
+ :email => "administrator@a.com",
9
+ :login => "admin")
10
+
11
+ Lockdown::System.make_user_administrator(u)
12
+ end
13
+
14
+ def self.down
15
+ #Nothing to see here...
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ class CreatePermissions < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :permissions do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+
9
+ create_table :permissions_user_groups, :id => false do |t|
10
+ t.integer :permission_id
11
+ t.integer :user_group_id
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ drop_table :permissions_user_groups
17
+ drop_table :permissions
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ class CreateProfiles < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :profiles do |t|
4
+ t.string :first_name
5
+ t.string :last_name
6
+ t.string :email
7
+ t.integer :updated_by
8
+ t.boolean :is_disabled
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ # The System profile is used as the updated_by reference when records
14
+ # are created programatically and the responsible user cannot be determined
15
+ # or is simply not available.
16
+ # TODO: Change email address
17
+ Profile.create(:first_name => "System",
18
+ :last_name => "User",
19
+ :email => "system@a.com")
20
+
21
+ end
22
+
23
+ def self.down
24
+ drop_table :profiles
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ class CreateUserGroups < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :user_groups do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+
9
+ create_table :user_groups_users, :id => false do |t|
10
+ t.integer :user_group_id
11
+ t.integer :user_id
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ drop_table :user_groups_users
17
+ drop_table :user_groups
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :users do |t|
4
+ t.string :login
5
+ t.string :crypted_password
6
+ t.string :salt
7
+ t.integer :profile_id
8
+ t.integer :updated_by
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+
14
+ def self.down
15
+ drop_table :users
16
+ end
17
+ end