hone-lockdown 1.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 (61) hide show
  1. data/.gitignore +6 -0
  2. data/History.txt +195 -0
  3. data/README.txt +36 -0
  4. data/Rakefile +14 -0
  5. data/VERSION +1 -0
  6. data/lib/lockdown.rb +73 -0
  7. data/lib/lockdown/context.rb +48 -0
  8. data/lib/lockdown/database.rb +117 -0
  9. data/lib/lockdown/frameworks/rails.rb +105 -0
  10. data/lib/lockdown/frameworks/rails/controller.rb +163 -0
  11. data/lib/lockdown/frameworks/rails/view.rb +50 -0
  12. data/lib/lockdown/helper.rb +101 -0
  13. data/lib/lockdown/orms/active_record.rb +68 -0
  14. data/lib/lockdown/permission.rb +240 -0
  15. data/lib/lockdown/rules.rb +378 -0
  16. data/lib/lockdown/session.rb +57 -0
  17. data/lib/lockdown/system.rb +52 -0
  18. data/rails_generators/lockdown/lockdown_generator.rb +273 -0
  19. data/rails_generators/lockdown/templates/app/controllers/permissions_controller.rb +22 -0
  20. data/rails_generators/lockdown/templates/app/controllers/sessions_controller.rb +39 -0
  21. data/rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb +122 -0
  22. data/rails_generators/lockdown/templates/app/controllers/users_controller.rb +117 -0
  23. data/rails_generators/lockdown/templates/app/helpers/permissions_helper.rb +2 -0
  24. data/rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb +2 -0
  25. data/rails_generators/lockdown/templates/app/helpers/users_helper.rb +2 -0
  26. data/rails_generators/lockdown/templates/app/models/permission.rb +13 -0
  27. data/rails_generators/lockdown/templates/app/models/profile.rb +10 -0
  28. data/rails_generators/lockdown/templates/app/models/user.rb +95 -0
  29. data/rails_generators/lockdown/templates/app/models/user_group.rb +15 -0
  30. data/rails_generators/lockdown/templates/app/views/permissions/index.html.erb +16 -0
  31. data/rails_generators/lockdown/templates/app/views/permissions/show.html.erb +26 -0
  32. data/rails_generators/lockdown/templates/app/views/sessions/new.html.erb +12 -0
  33. data/rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb +33 -0
  34. data/rails_generators/lockdown/templates/app/views/user_groups/index.html.erb +20 -0
  35. data/rails_generators/lockdown/templates/app/views/user_groups/new.html.erb +31 -0
  36. data/rails_generators/lockdown/templates/app/views/user_groups/show.html.erb +29 -0
  37. data/rails_generators/lockdown/templates/app/views/users/edit.html.erb +51 -0
  38. data/rails_generators/lockdown/templates/app/views/users/index.html.erb +22 -0
  39. data/rails_generators/lockdown/templates/app/views/users/new.html.erb +50 -0
  40. data/rails_generators/lockdown/templates/app/views/users/show.html.erb +33 -0
  41. data/rails_generators/lockdown/templates/config/initializers/lockit.rb +1 -0
  42. data/rails_generators/lockdown/templates/db/migrate/create_admin_user.rb +17 -0
  43. data/rails_generators/lockdown/templates/db/migrate/create_permissions.rb +19 -0
  44. data/rails_generators/lockdown/templates/db/migrate/create_profiles.rb +26 -0
  45. data/rails_generators/lockdown/templates/db/migrate/create_user_groups.rb +19 -0
  46. data/rails_generators/lockdown/templates/db/migrate/create_users.rb +17 -0
  47. data/rails_generators/lockdown/templates/lib/lockdown/README +42 -0
  48. data/rails_generators/lockdown/templates/lib/lockdown/init.rb +131 -0
  49. data/spec/lockdown/database_spec.rb +158 -0
  50. data/spec/lockdown/frameworks/rails/controller_spec.rb +224 -0
  51. data/spec/lockdown/frameworks/rails/view_spec.rb +87 -0
  52. data/spec/lockdown/frameworks/rails_spec.rb +175 -0
  53. data/spec/lockdown/permission_spec.rb +166 -0
  54. data/spec/lockdown/rules_spec.rb +109 -0
  55. data/spec/lockdown/session_spec.rb +89 -0
  56. data/spec/lockdown/system_spec.rb +59 -0
  57. data/spec/lockdown_spec.rb +19 -0
  58. data/spec/rcov.opts +5 -0
  59. data/spec/spec.opts +3 -0
  60. data/spec/spec_helper.rb +1 -0
  61. metadata +131 -0
@@ -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
@@ -0,0 +1,42 @@
1
+ #
2
+ # !!!!IMPORTANT!!!!
3
+ #
4
+ #*** MUST define a current_user method that will return the current user object
5
+ #
6
+ #*** MUST add call to add_lockdown_session_values to your login method
7
+ #
8
+ #*** MAY NEED to add call to reset_lockdown_session to your logout method.
9
+ # ** Not needed if your authentication system resets the session
10
+ #
11
+ # Definitely need to use the user_group and permission models. The lockdown
12
+ # generator will provide those for you. Just add the following to your user
13
+ # model:
14
+ # has_and_belongs_to_many :user_groups
15
+ #
16
+ # That's it!
17
+ #
18
+ #
19
+ # ~~~~Method Descriptions~~~~
20
+
21
+ # The Lockdown gem defines these session methods:
22
+ #
23
+ # current_user_id: returns the id of the current_user
24
+ #
25
+ # logged_in? : returns true if current_user_id > 0
26
+ #
27
+ # current_user_is_admin?: returns true if user is assigned
28
+ # administrator rights.
29
+ #
30
+ # reset_lockdown_session: This will nil the following session values:
31
+ # current_user_id
32
+ # access_rights
33
+ # expiry_time
34
+ #
35
+ # current_user_access_in_group?(grp): grp is a symbol referencing a
36
+ # Lockdown::UserGroups method such as :registered_users
37
+ # Will return true if the session[:access_rights] contain at
38
+ # least one match to the access_right list associated to the group
39
+ #
40
+ # If you want access to any of these methods in your view, just add them
41
+ # as helpers in your controller (application controller for global use).
42
+ #
@@ -0,0 +1,131 @@
1
+ Lockdown::System.configure do
2
+
3
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ # Configuration Options
5
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6
+ # Options with defaults:
7
+ #
8
+ #
9
+ # Set User model:
10
+ # # make sure you use the string "User", not the constant
11
+ # options[:user_model] = "User"
12
+ #
13
+ # Set UserGroup model:
14
+ # # make sure you use the string "UserGroup", not the constant
15
+ # options[:user_group_model] = "UserGroup"
16
+ #
17
+ # Set who_did_it method:
18
+ # This method is used in setting the created_by/updated_by fields and
19
+ # should be accessible to the controller
20
+ # options[:who_did_it] = :current_user_id
21
+ #
22
+ # Set default_who_did_it:
23
+ # When current_user_id returns nil, this is the value to use
24
+ # options[:default_who_did_it] = 1
25
+ #
26
+ # Lockdown version < 0.9.0 set this to:
27
+ # options[:default_who_did_it] = Profile::System
28
+ #
29
+ # Should probably be something like:
30
+ # options[:default_who_did_it] = User::SystemId
31
+ #
32
+ # Set timeout to 1 hour:
33
+ # options[:session_timeout] = (60 * 60)
34
+ #
35
+ # Call method when timeout occurs (method must be callable by controller):
36
+ # options[:session_timeout_method] = :clear_session_values
37
+ #
38
+ # Set system to logout if unauthorized access is attempted:
39
+ # options[:logout_on_access_violation] = false
40
+ #
41
+ # Set redirect to path on unauthorized access attempt:
42
+ # options[:access_denied_path] = "/"
43
+ #
44
+ # Set redirect to path on successful login:
45
+ # options[:successful_login_path] = "/"
46
+ #
47
+ # Set separator on links call
48
+ # options[:links_separator] = "|"
49
+ #
50
+ # If deploying to a subdirectory, set that here. Defaults to nil
51
+ # options[:subdirectory] = "blog"
52
+ # *Notice: Do not add leading or trailing slashes,
53
+ # Lockdown will handle this
54
+ #
55
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56
+ # Define permissions
57
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58
+ #
59
+ # set_permission(:product_management).
60
+ # with_controller(:products)
61
+ #
62
+ # :product_management is the name of the permission which is later
63
+ # referenced by the set_user_group method
64
+ #
65
+ # .with_controller(:products) defaults to all action_methods available on that
66
+ # controller. You can change this behaviour by chaining on except_methods or
67
+ # only_methods. (see examples below)
68
+ #
69
+ # ** To define a namespaced controller use two underscores:
70
+ # :admin__products
71
+ #
72
+ # if products is your standard RESTful resource you'll get:
73
+ # ["products/index , "products/show",
74
+ # "products/new", "products/edit",
75
+ # "products/create", "products/update",
76
+ # "products/destroy"]
77
+ #
78
+ # You can chain method calls to restrict the methods for one controller
79
+ # or you can add multiple controllers to one permission.
80
+ #
81
+ # set_permission(:security_management).
82
+ # with_controller(:users).
83
+ # and_controller(:user_groups).
84
+ # and_controller(:permissions)
85
+ #
86
+ # In addition to with_controller(:controller) there are:
87
+ #
88
+ # set_permission(:some_nice_permission_name).
89
+ # with_controller(:some_controller_name).
90
+ # only_methods(:only_method_1, :only_method_2)
91
+ #
92
+ # set_permission(:some_nice_permission_name).
93
+ # with_controller(:some_controller_name).
94
+ # except_methods(:except_method_1, :except_method_2)
95
+ #
96
+ # set_permission(:some_nice_permission_name).
97
+ # with_controller(:some_controller_name).
98
+ # except_methods(:except_method_1, :except_method_2).
99
+ # and_controller(:another_controller_name).
100
+ # and_controller(:yet_another_controller_name)
101
+ #
102
+ # Define your permissions here:
103
+
104
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
105
+ # Built-in user groups
106
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107
+ # You can assign the above permission to one of the built-in user groups
108
+ # by using the following:
109
+ #
110
+ # To allow public access on the permissions :sessions and :home:
111
+ # set_public_access :sessions, :home
112
+ #
113
+ # Restrict :my_account access to only authenticated users:
114
+ # set_protected_access :my_account
115
+ #
116
+ # Define the built-in user groups here:
117
+
118
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119
+ # Define user groups
120
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
121
+ #
122
+ # set_user_group(:catalog_management, :category_management,
123
+ # :product_management)
124
+ #
125
+ # :catalog_management is the name of the user group
126
+ # :category_management and :product_management refer to permission names
127
+ #
128
+ #
129
+ # Define your user groups here:
130
+
131
+ end