authentasaurus 0.4.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 (116) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +173 -0
  3. data/TODO +4 -0
  4. data/app/controllers/areas_controller.rb +4 -0
  5. data/app/controllers/groups_controller.rb +4 -0
  6. data/app/controllers/permissions_controller.rb +4 -0
  7. data/app/controllers/recoveries_controller.rb +2 -0
  8. data/app/controllers/registrations_controller.rb +2 -0
  9. data/app/controllers/sessions_controller.rb +2 -0
  10. data/app/controllers/user_invitations_controller.rb +4 -0
  11. data/app/controllers/users_controller.rb +4 -0
  12. data/app/controllers/validations_controller.rb +2 -0
  13. data/app/models/area.rb +2 -0
  14. data/app/models/authentasaurus_emailer.rb +2 -0
  15. data/app/models/group.rb +2 -0
  16. data/app/models/permission.rb +2 -0
  17. data/app/models/recovery.rb +2 -0
  18. data/app/models/session.rb +2 -0
  19. data/app/models/user.rb +3 -0
  20. data/app/models/user_invitation.rb +2 -0
  21. data/app/models/user_sync.rb +3 -0
  22. data/app/models/validation.rb +2 -0
  23. data/app/views/areas/edit.html.erb +7 -0
  24. data/app/views/areas/index.html.erb +11 -0
  25. data/app/views/areas/new.html.erb +7 -0
  26. data/app/views/areas/show.html.erb +7 -0
  27. data/app/views/authentasaurus_emailer/invitation_mail.html.erb +4 -0
  28. data/app/views/authentasaurus_emailer/recovery_mail.html.erb +7 -0
  29. data/app/views/authentasaurus_emailer/validation_mail.html.erb +6 -0
  30. data/app/views/groups/edit.html.erb +7 -0
  31. data/app/views/groups/index.html.erb +11 -0
  32. data/app/views/groups/new.html.erb +7 -0
  33. data/app/views/groups/show.html.erb +7 -0
  34. data/app/views/permissions/edit.html.erb +19 -0
  35. data/app/views/permissions/index.html.erb +17 -0
  36. data/app/views/permissions/new.html.erb +19 -0
  37. data/app/views/permissions/show.html.erb +7 -0
  38. data/app/views/recoveries/edit.html.erb +24 -0
  39. data/app/views/recoveries/new.html.erb +15 -0
  40. data/app/views/registrations/new.html.erb +21 -0
  41. data/app/views/sessions/new.html.erb +41 -0
  42. data/app/views/sessions/no_access.html.erb +1 -0
  43. data/app/views/user_invitations/index.html.erb +14 -0
  44. data/app/views/user_invitations/new.html.erb +9 -0
  45. data/app/views/users/edit.html.erb +27 -0
  46. data/app/views/users/index.html.erb +19 -0
  47. data/app/views/users/new.html.erb +27 -0
  48. data/app/views/users/show.html.erb +11 -0
  49. data/app/views/validations/activate.html.erb +6 -0
  50. data/app/views/validations/resend_validation_email.html.erb +6 -0
  51. data/config/locales/en.yml +34 -0
  52. data/generators/authentasaurus/USAGE +2 -0
  53. data/generators/authentasaurus/authentasaurus_generator.rb +9 -0
  54. data/generators/authentasaurus/templates/authentasaurus_tasks.rake +48 -0
  55. data/generators/authentasaurus/templates/defaults.yml +51 -0
  56. data/generators/authentasaurus/templates/initializer.rb +3 -0
  57. data/generators/authentasaurus_views/USAGE +12 -0
  58. data/generators/authentasaurus_views/authentasaurus_views_generator.rb +87 -0
  59. data/generators/authentasaurus_views/templates/views/areas/edit.html.erb +7 -0
  60. data/generators/authentasaurus_views/templates/views/areas/index.html.erb +11 -0
  61. data/generators/authentasaurus_views/templates/views/areas/new.html.erb +7 -0
  62. data/generators/authentasaurus_views/templates/views/areas/show.html.erb +7 -0
  63. data/generators/authentasaurus_views/templates/views/authentasaurus_emailer/invitation_mail.html.erb +4 -0
  64. data/generators/authentasaurus_views/templates/views/authentasaurus_emailer/recovery_mail.html.erb +7 -0
  65. data/generators/authentasaurus_views/templates/views/authentasaurus_emailer/validation_mail.html.erb +6 -0
  66. data/generators/authentasaurus_views/templates/views/groups/edit.html.erb +7 -0
  67. data/generators/authentasaurus_views/templates/views/groups/index.html.erb +11 -0
  68. data/generators/authentasaurus_views/templates/views/groups/new.html.erb +7 -0
  69. data/generators/authentasaurus_views/templates/views/groups/show.html.erb +7 -0
  70. data/generators/authentasaurus_views/templates/views/permissions/edit.html.erb +19 -0
  71. data/generators/authentasaurus_views/templates/views/permissions/index.html.erb +17 -0
  72. data/generators/authentasaurus_views/templates/views/permissions/new.html.erb +19 -0
  73. data/generators/authentasaurus_views/templates/views/permissions/show.html.erb +7 -0
  74. data/generators/authentasaurus_views/templates/views/recoveries/edit.html.erb +24 -0
  75. data/generators/authentasaurus_views/templates/views/recoveries/new.html.erb +15 -0
  76. data/generators/authentasaurus_views/templates/views/registrations/new.html.erb +21 -0
  77. data/generators/authentasaurus_views/templates/views/sessions/new.html.erb +41 -0
  78. data/generators/authentasaurus_views/templates/views/sessions/no_access.html.erb +1 -0
  79. data/generators/authentasaurus_views/templates/views/user_invitations/index.html.erb +14 -0
  80. data/generators/authentasaurus_views/templates/views/user_invitations/new.html.erb +9 -0
  81. data/generators/authentasaurus_views/templates/views/users/edit.html.erb +27 -0
  82. data/generators/authentasaurus_views/templates/views/users/index.html.erb +19 -0
  83. data/generators/authentasaurus_views/templates/views/users/new.html.erb +27 -0
  84. data/generators/authentasaurus_views/templates/views/users/show.html.erb +11 -0
  85. data/generators/authentasaurus_views/templates/views/validations/activate.html.erb +6 -0
  86. data/generators/authentasaurus_views/templates/views/validations/resend_validation_email.html.erb +6 -0
  87. data/lib/action_controller/authorization.rb +215 -0
  88. data/lib/action_view/authorization.rb +123 -0
  89. data/lib/active_record/acts_as_authenticatable.rb +80 -0
  90. data/lib/active_record/acts_as_authenticatable_validatable.rb +32 -0
  91. data/lib/active_record/authenticatable.rb +56 -0
  92. data/lib/active_resource/acts_as_authenticatable.rb +42 -0
  93. data/lib/active_resource/authenticatable.rb +22 -0
  94. data/lib/authentasaurus.rb +21 -0
  95. data/lib/authentasaurus/areas_controller.rb +71 -0
  96. data/lib/authentasaurus/authentasaurus_controller.rb +2 -0
  97. data/lib/authentasaurus/groups_controller.rb +73 -0
  98. data/lib/authentasaurus/models/area.rb +8 -0
  99. data/lib/authentasaurus/models/authentasaurus_emailer.rb +31 -0
  100. data/lib/authentasaurus/models/group.rb +8 -0
  101. data/lib/authentasaurus/models/permission.rb +9 -0
  102. data/lib/authentasaurus/models/recovery.rb +23 -0
  103. data/lib/authentasaurus/models/session.rb +63 -0
  104. data/lib/authentasaurus/models/user_invitation.rb +21 -0
  105. data/lib/authentasaurus/models/validation.rb +18 -0
  106. data/lib/authentasaurus/permissions_controller.rb +71 -0
  107. data/lib/authentasaurus/recoveries_controller.rb +59 -0
  108. data/lib/authentasaurus/registrations_controller.rb +32 -0
  109. data/lib/authentasaurus/sessions_controller.rb +45 -0
  110. data/lib/authentasaurus/user_invitations_controller.rb +39 -0
  111. data/lib/authentasaurus/users_controller.rb +71 -0
  112. data/lib/authentasaurus/validations_controller.rb +34 -0
  113. data/lib/helpers/migrations.rb +171 -0
  114. data/lib/helpers/routing.rb +90 -0
  115. data/rails/init.rb +37 -0
  116. metadata +188 -0
@@ -0,0 +1,7 @@
1
+ <h1>Editing <%= @area.name %></h1>
2
+ <% form_for @area do |f| %>
3
+ <%= f.label :name %>
4
+ <%= f.text_field :name, :size => 30 %>
5
+ <br>
6
+ <%= f.submit %>
7
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <h1>Areas</h1>
2
+ <table>
3
+ <tr>
4
+ <th>Target</th>
5
+ </tr>
6
+ <% @areas.each do |area| %>
7
+ <tr>
8
+ <td><%= link_to area.name, area %></td>
9
+ </tr>
10
+ <% end %>
11
+ </table>
@@ -0,0 +1,7 @@
1
+ <h1>Create Area</h1>
2
+ <% form_for @area do |f| %>
3
+ <%= f.label :name %>
4
+ <%= f.text_field :name, :size => 30 %>
5
+ <br>
6
+ <%= f.submit %>
7
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <h1><%= @area.name %></h1>
2
+ <h3>Groups that have permission on this area</h3>
3
+ <ul>
4
+ <% @area.groups.each do |group| %>
5
+ <li><%= link_to group.name, group %></li>
6
+ <% end %>
7
+ </ul>
@@ -0,0 +1,4 @@
1
+ <p>You've been invited to create an account at your-domain.com follow this <%= link_to "link", new_registrations_url(:token => @token) %> to respond to the invitation.</p>
2
+
3
+ <p>Best Regards,</p>
4
+ <p>your-domain.com Team</p>
@@ -0,0 +1,7 @@
1
+ <p>Dear <%= @name %>,</p>
2
+
3
+ <p>A request has been made to recover your account's password.</p>
4
+ <p>Please visit this <%= link_to "link", recover_password_url(@token) %> and follow the instructions.</p>
5
+
6
+ <p>Best Regards,</p>
7
+ <p>your-domain.com Team</p>
@@ -0,0 +1,6 @@
1
+ <p>Dear <%= @name %>,</p>
2
+
3
+ <p>Please validate your account at your-domain.com by visiting this <%= link_to "link", validate_url, :code => @vcode %>.</p>
4
+
5
+ <p>Best Regards,</p>
6
+ <p>your-domain.com Team</p>
@@ -0,0 +1,7 @@
1
+ <h1>Editing <%= @group.name %></h1>
2
+ <% form_for @group do |f| %>
3
+ <%= f.label :name %>
4
+ <%= f.text_field :name, :size => 30 %>
5
+ <br>
6
+ <%= f.submit %>
7
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <h1>Groups</h1>
2
+ <table width="100%">
3
+ <tr>
4
+ <th>Name</th>
5
+ </tr>
6
+ <% @groups.each do |group| %>
7
+ <tr>
8
+ <td><%= link_to group.name, group %></td>
9
+ </tr>
10
+ <% end %>
11
+ </table>
@@ -0,0 +1,7 @@
1
+ <h1>Create Group</h1>
2
+ <% form_for @group do |f| %>
3
+ <%= f.label :name %>
4
+ <%= f.text_field :name, :size => 30 %>
5
+ <br>
6
+ <%= f.submit %>
7
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <h1><%= @group.name %></h1>
2
+ <h2>Permissions</h2>
3
+ <ul>
4
+ <% @group.permissions.each do |permission| %>
5
+ <li><%= link_to permission.area.name, permission %></li>
6
+ <% end %>
7
+ </ul>
@@ -0,0 +1,19 @@
1
+ <h1>Editing <%= @permission.area.target %> permissions for <%= @permission.group.name %></h1>
2
+ <% form_for @permission do |f| %>
3
+ <%= f.label :group_id %>
4
+ <%= f.collection_select(:group_id, Group.find(:all), :id, :name, {:prompt => true}) %>
5
+ <br>
6
+ <%= f.label :area_id %>
7
+ <%= f.collection_select(:area_id, Area.find(:all), :id, :name, {:prompt => true}) %>
8
+ <br>
9
+ <%= f.label :group_id %>
10
+ <%= f.collection_select(:group_id, Group.find(:all), :id, :name, {:prompt => true}) %>
11
+ <br>
12
+ <%= f.label :read %>
13
+ <%= f.check_box :read %>
14
+ <br>
15
+ <%= f.label :write %>
16
+ <%= f.check_box :write %>
17
+ <br>
18
+ <%= f.submit %>
19
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <h1>Permissions</h1>
2
+ <table>
3
+ <tr>
4
+ <th>Group</th>
5
+ <th>Area</th>
6
+ <th>Read</th>
7
+ <th>Write</th>
8
+ </tr>
9
+ <% @permissions.each do |permission| %>
10
+ <tr>
11
+ <td><%= link_to permission.group.name, permission.group %></td>
12
+ <td><%= link_to permission.area.name, permission.area %></td>
13
+ <td><%= check_box_tag :read, "read", permission.read, :disabled => true %></td>
14
+ <td><%= check_box_tag :write, "write", permission.write, :disabled => true %></td>
15
+ </tr>
16
+ <% end %>
17
+ </table>
@@ -0,0 +1,19 @@
1
+ <h1>Create Permission</h1>
2
+ <% form_for @permission do |f| %>
3
+ <%= f.label :group_id %>
4
+ <%= f.collection_select(:group_id, Group.find(:all), :id, :name, {:prompt => true}) %>
5
+ <br>
6
+ <%= f.label :area_id %>
7
+ <%= f.collection_select(:area_id, Area.find(:all), :id, :name, {:prompt => true}) %>
8
+ <br>
9
+ <%= f.label :group_id %>
10
+ <%= f.collection_select(:group_id, Group.find(:all), :id, :name, {:prompt => true}) %>
11
+ <br>
12
+ <%= f.label :read %>
13
+ <%= f.check_box :read %>
14
+ <br>
15
+ <%= f.label :write %>
16
+ <%= f.check_box :write %>
17
+ <br>
18
+ <%= f.submit %>
19
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <h1><%= @permission.area.name %> permissions for <%= @permission.group.name %></h1>
2
+ <% if @permission.read %>
3
+ <h3>Members of <%= @permission.group.name %> have read permission for <%= @permission.area.name %></h3>
4
+ <% end %>
5
+ <% if @permission.write %>
6
+ <h3>Members of <%= @permission.group.name %> have write permission for <%= @permission.area.name %></h3>
7
+ <% end %>
@@ -0,0 +1,24 @@
1
+ <h1>Fill in your new password</h1>
2
+
3
+ <% form_tag do_recover_password_path, :method => :delete do %>
4
+ <%= error_messages_for :user %>
5
+
6
+ <p>
7
+ <%= label_tag :name %><br />
8
+ <%= text_field_tag :name, @user.name, :disabled => true %>
9
+ </p>
10
+
11
+ <p>
12
+ <%= label_tag "user[new_password]", "Password" %><br />
13
+ <%= password_field_tag "user[new_password]" %>
14
+ </p>
15
+ <p>
16
+ <%= label_tag "user[new_password_confirmation]", "Password confirmation" %><br />
17
+ <%= password_field_tag "user[new_password_confirmation]" %>
18
+ </p>
19
+ <p>
20
+ <%= submit_tag "Set" %>
21
+ </p>
22
+ <% end %>
23
+
24
+ <%= link_to "Cancel", url_for(:back) %>
@@ -0,0 +1,15 @@
1
+ <h1>Recover your password</h1>
2
+
3
+ <% form_tag do_forgot_password_path, :method => :post do %>
4
+ <%= error_messages_for :recovery %>
5
+ <p>
6
+ <%= label_tag :email %><br />
7
+ <%= text_field_tag :email, params[:email] %>
8
+ </p>
9
+
10
+ <p>
11
+ <%= submit_tag "Send Instructions" %>
12
+ </p>
13
+ <% end %>
14
+
15
+ <%= link_to "Cancel", url_for(:back) %>
@@ -0,0 +1,21 @@
1
+ <h1>Enter your data</h1>
2
+ <% form_for @user, :url => registrations_path(:token => params[:token]) do |f| %>
3
+ <%= f.error_messages %>
4
+ <br>
5
+ <%= f.label :username %>
6
+ <%= f.text_field :username, :size => 30 %>
7
+ <br>
8
+ <%= f.label :password %>
9
+ <%= f.password_field :password, :size => 30 %>
10
+ <br>
11
+ <%= f.label :password_confirmation %>
12
+ <%= f.password_field :password_confirmation, :size => 30 %>
13
+ <br>
14
+ <%= f.label :name %>
15
+ <%= f.text_field :name, :size => 30 %>
16
+ <br>
17
+ <%= f.label :email %>
18
+ <%= f.text_field :email, :size => 30 %>
19
+ <br>
20
+ <%= f.submit "Create" %>
21
+ <% end %>
@@ -0,0 +1,41 @@
1
+ <div class="form-stroke">
2
+ <%= flash[:alert] if flash[:alert] %>
3
+ <% form_for @session do |f| %>
4
+ <h2>Sign in</h2>
5
+ <br>
6
+ <%= f.error_messages %>
7
+ <p>
8
+ <%= f.label :username %>
9
+ <%= f.text_field :username, :style => "width: 98%;" %>
10
+ </p>
11
+
12
+ <p>
13
+ <%= f.label :password %>
14
+ <%= f.password_field :password, :style => "width: 98%;" %>
15
+ </p>
16
+
17
+ <label>
18
+ <%= f.check_box :remember %> Remember me
19
+ </label>
20
+
21
+ <div>
22
+ <div style="float:left; padding-top: 9px;">
23
+ <% unless defined?(forgot_password_path).nil? %>
24
+ <p>
25
+ <%= link_to(t(:forgot_password_link, :scope => [:authentasaurus, :views, :sessions]), forgot_password_path) %>
26
+ </p>
27
+ <% end %>
28
+
29
+ <% unless defined?(resend_validation_email_path).nil? %>
30
+ <p>
31
+ <%= link_to(t(:resend_validation_email_link, :scope => [:authentasaurus, :views, :sessions]), resend_validation_email_path) %>
32
+ </p>
33
+ <% end %>
34
+ </div>
35
+ <div style="float:right;">
36
+ <%= submit_tag "Sign in" %>
37
+ </div>
38
+ <br style="clear: both;">
39
+ </div>
40
+ <% end %>
41
+ </div>
@@ -0,0 +1 @@
1
+ <h1>You are not allowed to access this page.</h1>
@@ -0,0 +1,14 @@
1
+ <h1>User Invitations</h1>
2
+ <table width="100%">
3
+ <tr>
4
+ <th>Email</th>
5
+ </tr>
6
+ <% @invitations.each do |invitation| %>
7
+ <tr>
8
+ <td><%= invitation.email %></td>
9
+ <td><%= link_to "Delete", invitation, :method => :delete, :confirm => "Are you sure?" %></td>
10
+ </tr>
11
+ <% end %>
12
+ </table>
13
+ <br>
14
+ <%= link_to "New", :action => :new %>
@@ -0,0 +1,9 @@
1
+ <h1>Create new user invitation</h1>
2
+ <% form_for @invitation do |f| %>
3
+ <%= f.error_messages %>
4
+ <br>
5
+ <%= f.label :email %>
6
+ <%= f.text_field :email, :size => 30 %>
7
+ <br>
8
+ <%= f.submit "Create" %>
9
+ <% end %>
@@ -0,0 +1,27 @@
1
+ <h1>Editing <%= @user.username %></h1>
2
+ <% form_for @user do |f| %>
3
+ <%= f.error_messages %>
4
+ <br>
5
+ <%= f.label :username %>
6
+ <%= f.text_field :username, :size => 30 %>
7
+ <br>
8
+ <%= f.label :new_password %>
9
+ <%= f.password_field :new_password, :size => 30 %>
10
+ <br>
11
+ <%= f.label :new_password_confirmation %>
12
+ <%= f.password_field :new_password_confirmation, :size => 30 %>
13
+ <br>
14
+ <%= f.label :name %>
15
+ <%= f.text_field :name, :size => 30 %>
16
+ <br>
17
+ <%= f.label :email %>
18
+ <%= f.text_field :email, :size => 30 %>
19
+ <br>
20
+ <%= f.label :active %>
21
+ <%= f.check_box :active %>
22
+ <br>
23
+ <%= f.label :group_id %>
24
+ <%= f.collection_select(:group_id, Group.find(:all), :id, :name, {:prompt => true}) %>
25
+ <br>
26
+ <%= f.submit "Create" %>
27
+ <% end %>
@@ -0,0 +1,19 @@
1
+ <h1>Users</h1>
2
+ <table width="100%">
3
+ <tr>
4
+ <th>Username</th>
5
+ <th>Name</th>
6
+ <th>Email</th>
7
+ <th>Active</th>
8
+ <th>Group</th>
9
+ </tr>
10
+ <% @users.each do |user| %>
11
+ <tr>
12
+ <td><%= link_to user.username, user %></td>
13
+ <td><%= user.name %></td>
14
+ <td><%= user.email %></td>
15
+ <td><%= check_box_tag user.id, "active", user.active, :disabled => true %></td>
16
+ <td><%= link_to user.group.name, user.group %></td>
17
+ </tr>
18
+ <% end %>
19
+ </table>
@@ -0,0 +1,27 @@
1
+ <h1>Create new user</h1>
2
+ <% form_for @user do |f| %>
3
+ <%= f.error_messages %>
4
+ <br>
5
+ <%= f.label :username %>
6
+ <%= f.text_field :username, :size => 30 %>
7
+ <br>
8
+ <%= f.label :password %>
9
+ <%= f.password_field :password, :size => 30 %>
10
+ <br>
11
+ <%= f.label :password_confirmation %>
12
+ <%= f.password_field :password_confirmation, :size => 30 %>
13
+ <br>
14
+ <%= f.label :name %>
15
+ <%= f.text_field :name, :size => 30 %>
16
+ <br>
17
+ <%= f.label :email %>
18
+ <%= f.text_field :email, :size => 30 %>
19
+ <br>
20
+ <%= f.label :active %>
21
+ <%= f.check_box :active %>
22
+ <br>
23
+ <%= f.label :group_id %>
24
+ <%= f.collection_select(:group_id, Group.find(:all), :id, :name, {:prompt => true}) %>
25
+ <br>
26
+ <%= f.submit "Create" %>
27
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <h1><%= @user.username %></h1>
2
+ <dl>
3
+ <dt>Name : </dt>
4
+ <dd><%= @user.name %></dd>
5
+ <dt>Email : </dt>
6
+ <dd><%= @user.email %></dd>
7
+ <dt>Active : </dt>
8
+ <dd><%= check_box_tag @user.id, "active", @user.active, :disabled => true %></dd>
9
+ <dt>Group : </dt>
10
+ <dd><%= link_to @user.group.name, @user.group %></dd>
11
+ </dl>
@@ -0,0 +1,6 @@
1
+ <h3><%= flash.now[:notice] %></h3>
2
+ <% form_tag do %>
3
+ Validation Code :<br>
4
+ <p><%= text_field_tag :vcode, params[:vcode], :size => 44 %></p>
5
+ <p><%= submit_tag "Validate" %></p>
6
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h3><%= flash.now[:notice] %></h3>
2
+ <% form_tag do_resend_validation_email_path do %>
3
+ Email :<br>
4
+ <p><%= text_field_tag :email, params[:email], :size => 44 %></p>
5
+ <p><%= submit_tag "Submit" %></p>
6
+ <% end %>
@@ -0,0 +1,215 @@
1
+ # Defines authorization helpers for ActionController
2
+ module ActionController::Authorization
3
+
4
+ def self.included(base) # :nodoc:
5
+ base.send :extend, ClassMethods
6
+ base.send :include, InstanceMethods
7
+ end
8
+
9
+
10
+ module ClassMethods
11
+
12
+ # <tt>require_login</tt>::
13
+ # requires the user to login before accessing the actions specified
14
+ #
15
+ # <b>ex:</b> Tells Authentasaurus that the action destroy requires login and that
16
+ # Authentasaurus shouldn't store the request in the session
17
+ # (typically for logout actions)
18
+ #
19
+ # * :skip_request - skips saving the original request (to redirect to after login)
20
+ # * :user_model - if defined, authentasaurus will use that model instead of the default "User"
21
+ # * :if - specifies a method, proc or string to call to determine if the authorization should occur
22
+ # * :unless - specifies a method, proc or string to call to determine if the authorization should not occur
23
+ #
24
+ # require_login :destroy, :skip_request => true
25
+ def require_login (*attrs)
26
+ options = attrs.extract_options!.symbolize_keys
27
+ attrs = attrs.flatten
28
+
29
+ unless attrs.empty?
30
+ before_filter :only => attrs, :if => options[:if], :unless => options[:unless] do |controller|
31
+ controller.instance_eval {check_logged_in !options[:skip_request].nil?, options[:user_model]}
32
+ end
33
+ else
34
+ before_filter :if => options[:if], :unless => options[:unless] do |c|
35
+ c.instance_eval {check_logged_in !options[:skip_request].nil?, options[:user_model]}
36
+ end
37
+ end
38
+ end
39
+
40
+ # <tt>require_write</tt>::
41
+ # requires the user to have a write permission to that area to access the actions specified
42
+ #
43
+ # <b>ex:</b> Tells Authentasaurus that the actions create_user and delete_user
44
+ # requires login and write permission.
45
+ #
46
+ # * :skip_request - skips saving the original request (to redirect to after login)
47
+ # * :user_model - if defined, authentasaurus will use that model instead of the default "User"
48
+ # * :if - specifies a method, proc or string to call to determine if the authorization should occur
49
+ # * :unless - specifies a method, proc or string to call to determine if the authorization should not occur
50
+ #
51
+ # require_write :create_user, :delete_user
52
+ def require_write(*attrs)
53
+ options = attrs.extract_options!.symbolize_keys
54
+ attrs = attrs.flatten
55
+
56
+
57
+ unless attrs.empty?
58
+ before_filter :only => attrs, :if => options[:if], :unless => options[:unless] do |controller|
59
+ controller.instance_eval { check_write_permissions !options[:skip_request].nil?, options[:user_model] }
60
+ end
61
+ else
62
+ before_filter :if => options[:if], :unless => options[:unless] do |c|
63
+ c.instance_eval {check_write_permissions !options[:skip_request].nil?, options[:user_model]}
64
+ end
65
+ end
66
+ end
67
+
68
+ # <tt>require_read</tt>::
69
+ # requires the user to have a read permission to that area to access the actions specified
70
+ #
71
+ # <b>ex:</b> Tells Authentasaurus that the action show_user requires login and read
72
+ # permission.
73
+ #
74
+ # * :skip_request - skips saving the original request (to redirect to after login)
75
+ # * :user_model - if defined, authentasaurus will use that model instead of the default "User"
76
+ # * :if - specifies a method, proc or string to call to determine if the authorization should occur
77
+ # * :unless - specifies a method, proc or string to call to determine if the authorization should not occur
78
+ #
79
+ # require_read :show_user
80
+ def require_read(*attrs)
81
+ options = attrs.extract_options!.symbolize_keys
82
+ attrs = attrs.flatten
83
+
84
+ unless attrs.empty?
85
+ before_filter :only => attrs, :if => options[:if], :unless => options[:unless] do |controller|
86
+ controller.instance_eval { check_read_permissions !options[:skip_request].nil?, options[:user_model] }
87
+ end
88
+ else
89
+ before_filter :if => options[:if], :unless => options[:unless] do |c|
90
+ c.instance_eval { check_read_permissions !options[:skip_request].nil?, options[:user_model] }
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ module InstanceMethods
97
+ private
98
+ # Returns an object of the current user
99
+ def current_user(user_model = nil)
100
+ user_model = User if user_model.nil?
101
+ return user_model.find session[:user_id] if session[:user_id]
102
+ end
103
+
104
+ # Checks if the current user is logged in and redirects to the login path if the user is not logged in.
105
+ #
106
+ # If skip_request is set to true, the user won't be redirected to the original url after he/she logs in.
107
+ def check_logged_in(skip_request = false, user_model = nil)
108
+ unless is_logged_in?(user_model)
109
+ login_required skip_request
110
+ end
111
+ end
112
+
113
+ # Checks if the current user is logged in and has write permission over the current controller, redirects to no access
114
+ # page if the user hasn't the permissions and redirects to the login path if the user is not logged in
115
+ #
116
+ # If skip_request is set to true, the user won't be redirected to the original url after he/she logs in.
117
+ def check_write_permissions(skip_request = false, user_model = nil)
118
+ if is_logged_in?(user_model)
119
+ user_permissions = session[:user_permissions]
120
+ check = user_permissions[:write].find { |perm| perm==self.controller_name || perm=="all" }
121
+ unless check
122
+ redirect_to no_access_sessions_path
123
+ end
124
+ else
125
+ login_required skip_request
126
+ end
127
+ end
128
+
129
+ # Checks if the current user is logged in and has read permission over the current controller, redirects to no access
130
+ # page if the user hasn't the permissions and redirects to the login path if the user is not logged in
131
+ #
132
+ # If skip_request is set to true, the user won't be redirected to the original url after he/she logs in.
133
+ def check_read_permissions(skip_request = false, user_model = nil)
134
+ if is_logged_in?(user_model)
135
+ user_permissions = session[:user_permissions]
136
+ check = user_permissions[:read].find { |perm| perm==self.controller_name || perm=="all" }
137
+ unless check
138
+ redirect_to no_access_sessions_path
139
+ end
140
+ else
141
+ login_required skip_request
142
+ end
143
+ end
144
+
145
+ # Checks if the current user is logged in but takes no further action
146
+ def is_logged_in?(user_model)
147
+ user_model = User if user_model.nil?
148
+ unless user_model.find_by_id(session[:user_id])
149
+ return cookie_login?(user_model)
150
+ end
151
+ return true
152
+ end
153
+
154
+ # Logs in the user through a remember me cookie
155
+ def cookie_login?(user_model)
156
+ user_model = User if user_model.nil?
157
+
158
+ if cookies[:remember_me_token]
159
+ user = user_model.find_by_remember_me_token cookies[:remember_me_token]
160
+ if user.nil?
161
+ cookies.delete :remember_me_token
162
+ return false
163
+ else
164
+ session[:user_id] = user.id
165
+ session[:user_permissions] = {:read => user.permissions.collect{|per| per.area.name if per.read}, :write => user.permissions.collect{|per| per.area.name if per.write}}
166
+ return true
167
+ end
168
+ else
169
+ return false
170
+ end
171
+ end
172
+
173
+ # Redirects the user to the login page
174
+ #
175
+ # If skip_request is set to true, the user won't be redirected to the original url after he/she logs in.
176
+ def login_required(skip_request)
177
+ unless(skip_request)
178
+ session[:original_url]=request.url
179
+ end
180
+ flash[:notice] = t(:login_required, :scope => [:authentasaurus, :action_controller, :errors, :messages])
181
+ redirect_to new_session_path
182
+ end
183
+
184
+ # Checks if the current user has the appropriate permission
185
+ #
186
+ # *ex*: has?(:write) or has?(:read, :users)
187
+ def has?(permission, area = nil)
188
+ return false unless is_logged_in?
189
+ check = false
190
+ case permission
191
+ when :write
192
+ unless area
193
+ user_permissions = session[:user_permissions]
194
+ check = user_permissions[:write].find { |perm| perm==self.controller_name || perm=="all" }
195
+ else
196
+ user_permissions = session[:user_permissions]
197
+ check = user_permissions[:write].find { |perm| perm==area.to_s || perm=="all" }
198
+ end
199
+ when :read
200
+ unless area
201
+ user_permissions = session[:user_permissions]
202
+ check = user_permissions[:read].find { |perm| perm==self.controller_name || perm=="all" }
203
+ else
204
+ user_permissions = session[:user_permissions]
205
+ check = user_permissions[:read].find { |perm| perm==area.to_s || perm=="all" }
206
+ end
207
+ end
208
+ return check
209
+ end
210
+
211
+ def controller_instance
212
+ self
213
+ end
214
+ end
215
+ end