lockdown_vail 1.6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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