ixtlan-guard 0.1.0 → 0.4.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 (44) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/lib/generators/active_record/templates/flavor_migration.rb +13 -0
  3. data/lib/generators/active_record/templates/flavor_model.rb +8 -0
  4. data/lib/generators/active_record/templates/group_model.rb +43 -0
  5. data/lib/generators/active_record/templates/group_user_migration.rb +13 -0
  6. data/lib/generators/active_record/templates/user_model.rb +124 -0
  7. data/lib/generators/active_record/user_management_models_generator.rb +202 -0
  8. data/lib/generators/erb/user_management_controller_generator.rb +10 -0
  9. data/lib/generators/{ixtlan → guard}/controller/USAGE +0 -0
  10. data/lib/generators/{ixtlan → guard}/controller/controller_generator.rb +2 -2
  11. data/lib/generators/{ixtlan → guard}/scaffold/USAGE +0 -0
  12. data/lib/generators/{ixtlan → guard}/scaffold/scaffold_generator.rb +4 -6
  13. data/lib/generators/guard/scaffold/templates/guard.rb +20 -0
  14. data/lib/generators/guard/templates/guard.rb +20 -0
  15. data/lib/generators/ixtlan/maintenance_scaffold/USAGE +8 -0
  16. data/lib/generators/ixtlan/maintenance_scaffold/maintenance_scaffold_generator.rb +40 -0
  17. data/lib/generators/ixtlan/permissions_scaffold/USAGE +8 -0
  18. data/lib/generators/ixtlan/permissions_scaffold/permissions_scaffold_generator.rb +33 -0
  19. data/lib/generators/ixtlan/user_management_controller/USAGE +8 -0
  20. data/lib/generators/ixtlan/user_management_controller/user_management_controller_generator.rb +23 -0
  21. data/lib/generators/ixtlan/user_management_models/USAGE +8 -0
  22. data/lib/generators/ixtlan/user_management_models/user_management_models_generator.rb +19 -0
  23. data/lib/generators/ixtlan/user_management_scaffold/user_management_scaffold_generator.rb +13 -0
  24. data/lib/ixtlan-guard.rb +2 -2
  25. data/lib/ixtlan/guard.rb +1 -159
  26. data/lib/ixtlan/guard/controllers/maintenance_controller.rb +45 -0
  27. data/lib/ixtlan/guard/controllers/permissions_controller.rb +41 -0
  28. data/lib/ixtlan/guard/guard.rb +245 -0
  29. data/lib/ixtlan/guard/models/maintenance.rb +55 -0
  30. data/lib/ixtlan/guard/models/user_update_manager.rb +95 -0
  31. data/lib/ixtlan/guard/rails_integration.rb +88 -0
  32. data/lib/ixtlan/guard/railtie.rb +33 -0
  33. data/lib/ixtlan/guard/spec/user_management_models_spec.rb +193 -0
  34. data/spec/guard_spec.rb +48 -12
  35. data/spec/railtie_spec.rb +1 -1
  36. metadata +75 -52
  37. data/lib/generators/ixtlan/templates/edit.html.erb +0 -10
  38. data/lib/generators/ixtlan/templates/guard.rb +0 -13
  39. data/lib/generators/ixtlan/templates/index.html.erb +0 -35
  40. data/lib/generators/ixtlan/templates/new.html.erb +0 -7
  41. data/lib/generators/ixtlan/templates/show.html.erb +0 -16
  42. data/lib/generators/scaffold/scaffold/scaffold_generator.rb +0 -23
  43. data/lib/ixtlan/guard_railtie.rb +0 -43
  44. data/lib/ixtlan/rails_integration.rb +0 -55
@@ -1,10 +0,0 @@
1
- <h1>Editing <%= singular_table_name %></h1>
2
-
3
- <%%= render 'form' %>
4
-
5
- <%% if allowed?(:<%= table_name %>, :show) %>
6
- <%%= link_to 'Show', @<%= singular_table_name %> %> |
7
- <%% end %>
8
- <%% if allowed?(:<%= table_name %>, :index) %>
9
- <%%= link_to 'Back', <%= index_helper %>_path %>
10
- <%% end %>
@@ -1,13 +0,0 @@
1
- class <%= guard_class_name %>Guard
2
- def initialize(guard)
3
- #guard.name = "<%= plural_file_name %>"
4
- <% if aliases -%>
5
- guard.aliases = <%= aliases.inspect %>
6
- <% end -%>
7
- guard.action_map= {
8
- <% for action in actions -%>
9
- :<%= action %> => [],
10
- <% end -%>
11
- }
12
- end
13
- end
@@ -1,35 +0,0 @@
1
- <h1>Listing <%= plural_table_name %></h1>
2
-
3
- <table>
4
- <tr>
5
- <% for attribute in attributes -%>
6
- <th><%= attribute.human_name %></th>
7
- <% end -%>
8
- <th></th>
9
- <th></th>
10
- <th></th>
11
- </tr>
12
-
13
- <%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
14
- <tr>
15
- <% for attribute in attributes -%>
16
- <td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
17
- <% end -%>
18
- <%% if allowed?(:<%= table_name %>, :show) %>
19
- <td><%%= link_to 'Show', <%= singular_table_name %> %></td>
20
- <%% end %>
21
- <%% if allowed?(:<%= table_name %>, :update) %>
22
- <td><%%= link_to 'Edit', edit_<%= singular_table_name %>_path(<%= singular_table_name %>) %></td>
23
- <%% end %>
24
- <%% if allowed?(:<%= table_name %>, :destroy) %>
25
- <td><%%= link_to 'Destroy', <%= singular_table_name %>, :confirm => 'Are you sure?', :method => :delete %></td>
26
- <%% end %>
27
- </tr>
28
- <%% end %>
29
- </table>
30
-
31
- <br />
32
-
33
- <%% if allowed?(:<%= table_name %>, :create) %>
34
- <%%= link_to 'New <%= human_name %>', new_<%= singular_table_name %>_path %>
35
- <%% end %>
@@ -1,7 +0,0 @@
1
- <h1>New <%= singular_table_name %></h1>
2
-
3
- <%%= render 'form' %>
4
-
5
- <%% if allowed?(:<%= table_name %>, :index) %>
6
- <%%= link_to 'Back', <%= index_helper %>_path %>
7
- <%% end %>
@@ -1,16 +0,0 @@
1
- <p id="notice"><%%= notice %></p>
2
-
3
- <% for attribute in attributes -%>
4
- <p>
5
- <b><%= attribute.human_name %>:</b>
6
- <%%= @<%= singular_table_name %>.<%= attribute.name %> %>
7
- </p>
8
-
9
- <% end -%>
10
-
11
- <%% if allowed?(:<%= table_name %>, :update) %>
12
- <%%= link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>) %> |
13
- <%% end %>
14
- <%% if allowed?(:<%= table_name %>, :index) %>
15
- <%%= link_to 'Back', <%= index_helper %>_path %>
16
- <%% end %>
@@ -1,23 +0,0 @@
1
- # use this extended copy of Rails::Generators::ScaffoldGenerator
2
- # since the search path is the following:
3
- # ["scaffold:scaffold", "rails:scaffold", "scaffold"]
4
- # which allows to override orignal generator
5
- # adding a Rails::Generators::ScaffoldGenerator.hook_for did not work
6
- # since it looses the ORM config somehow
7
- require 'rails/generators/rails/resource/resource_generator'
8
- module Rails
9
- module Generators
10
- class ScaffoldGenerator < ResourceGenerator #metagenerator
11
-
12
- remove_hook_for :resource_controller
13
- remove_class_option :actions
14
-
15
- hook_for :scaffold_controller, :required => true, :in => :rails
16
- hook_for :stylesheets, :in => :rails
17
-
18
- hook_for :ixtlan, :type => :boolean, :default => true do |controller|
19
- invoke controller, [class_name]
20
- end
21
- end
22
- end
23
- end
@@ -1,43 +0,0 @@
1
- require 'rails'
2
- require 'ixtlan/guard'
3
- require 'logger'
4
-
5
- class GuardRailtie < Rails::Railtie
6
-
7
- config.before_configuration do |app|
8
- app.config.class.class_eval do
9
- attr_accessor :guard
10
- end
11
- app.config.guard =
12
- Ixtlan::Guard.new(Logger.new(STDERR),
13
- :root,
14
- File.join(Rails.root, "app", "guards"))
15
- end
16
-
17
- config.after_initialize do |app|
18
- logger = app.config.logger || Rails.logger || Logger.new(STDERR)
19
- app.config.guard.logger = logger
20
- begin
21
- app.config.guard.setup
22
- rescue Ixtlan::GuardException => e
23
- logger.warn e.message
24
- end
25
- end
26
-
27
- config.generators do
28
- require 'rails/generators'
29
- require 'rails/generators/rails/controller/controller_generator'
30
- require 'rails/generators/erb/scaffold/scaffold_generator'
31
- Rails::Generators::ControllerGenerator.hook_for :ixtlan, :type => :boolean, :default => true do |controller|
32
- invoke controller, [ class_name, actions ]
33
- end
34
- Erb::Generators::ScaffoldGenerator.source_paths.insert(0, File.expand_path('../../generators/ixtlan/templates', __FILE__))
35
- #require 'rails/generators/rails/scaffold/scaffold_generator'
36
- # somehow the check is before the value is set,
37
- # so just ignore the require flag
38
- #Rails::Generators::ScaffoldGenerator.class_options[:orm].instance_variable_set(:@required, false)
39
- #Rails::Generators::ScaffoldGenerator.hook_for :ixtlan, :as => :scaffold, :type => :boolean, :default => true do |controller|
40
- # invoke controller, [class_name]
41
- #end
42
- end
43
- end
@@ -1,55 +0,0 @@
1
- require 'ixtlan/guard'
2
- module Ixtlan
3
- module ActionController #:nodoc:
4
- module Guard #:nodoc:
5
- def self.included(base)
6
- base.send(:include, InstanceMethods)
7
- end
8
- module InstanceMethods #:nodoc:
9
-
10
- protected
11
-
12
- def guard
13
- Rails.configuration.guard
14
- end
15
-
16
- def authorization(&block)
17
- resource_authorization(params[:controller], params[:action], &block)
18
- end
19
-
20
- def resource_authorization(resource, action, &block)
21
- unless guard.check(self, resource, action, &block)
22
- raise ::Ixtlan::PermissionDenied.new("permission denied for '#{resource}##{action}'")
23
- end
24
- true
25
- end
26
-
27
- def allowed?(action, &block)
28
- guard.check(self, params[:controller], action, &block)
29
- end
30
- end
31
- end
32
- end
33
-
34
- module Allowed #:nodoc:
35
- # Inclusion hook to make #allowed available as method
36
- def self.included(base)
37
- base.send(:include, InstanceMethods)
38
- end
39
-
40
- module InstanceMethods #:nodoc:
41
- def allowed?(resource, action, &block)
42
- controller.send(:guard).check(controller, resource, action, &block)
43
- end
44
- end
45
- end
46
- end
47
-
48
- ActionController::Base.send(:include, Ixtlan::ActionController::Guard)
49
- ActionController::Base.send(:before_filter, :authorization)
50
- ActionView::Base.send(:include, Ixtlan::Allowed)
51
- module Erector
52
- class Widget
53
- include Ixtlan::Allowed
54
- end
55
- end