auth-assistant 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 (64) hide show
  1. data/.DS_Store +0 -0
  2. data/.document +5 -0
  3. data/.gitignore +39 -0
  4. data/Changelog.txt +30 -0
  5. data/LICENSE +20 -0
  6. data/README.markdown +308 -0
  7. data/Rakefile +20 -0
  8. data/VERSION +1 -0
  9. data/app/.DS_Store +0 -0
  10. data/app/views/.DS_Store +0 -0
  11. data/app/views/auth_assist/menu/_admin_login_items.html.erb +11 -0
  12. data/app/views/auth_assist/menu/_login_items.html.erb +11 -0
  13. data/app/views/auth_assist/menu/_registration_items.html.erb +10 -0
  14. data/auth-assistant.gemspec +115 -0
  15. data/config/locales/en.yml +14 -0
  16. data/init.rb +1 -0
  17. data/lib/.DS_Store +0 -0
  18. data/lib/auth-assistant.rb +24 -0
  19. data/lib/auth_assistant/configure.rb +16 -0
  20. data/lib/auth_assistant/helpers/admin_role.rb +59 -0
  21. data/lib/auth_assistant/helpers/all.rb +4 -0
  22. data/lib/auth_assistant/helpers/localhost.rb +22 -0
  23. data/lib/auth_assistant/helpers/roles.rb +52 -0
  24. data/lib/auth_assistant/helpers/user_role.rb +47 -0
  25. data/lib/auth_assistant/model/user_config.rb +42 -0
  26. data/lib/auth_assistant/role_strategies/admin_field.rb +37 -0
  27. data/lib/auth_assistant/role_strategies/all.rb +7 -0
  28. data/lib/auth_assistant/role_strategies/multi_role_assignment.rb +34 -0
  29. data/lib/auth_assistant/role_strategies/role_assignment.rb +41 -0
  30. data/lib/auth_assistant/role_strategies/role_field.rb +32 -0
  31. data/lib/auth_assistant/role_strategies/roles_field.rb +31 -0
  32. data/lib/auth_assistant/role_strategies/roles_mask.rb +35 -0
  33. data/lib/auth_assistant/role_strategies/shared.rb +25 -0
  34. data/lib/auth_assistant/translate/authlabels.rb +23 -0
  35. data/lib/auth_assistant/view/all.rb +4 -0
  36. data/lib/auth_assistant/view/auth_menu_item.rb +27 -0
  37. data/lib/auth_assistant/view/registration_link.rb +30 -0
  38. data/lib/auth_assistant/view/rest_link.rb +70 -0
  39. data/lib/auth_assistant/view/session_link.rb +31 -0
  40. data/lib/generators/.DS_Store +0 -0
  41. data/lib/generators/auth_assist/.DS_Store +0 -0
  42. data/lib/generators/auth_assist/clear/clear_generator.rb +30 -0
  43. data/lib/generators/auth_assist/config/.DS_Store +0 -0
  44. data/lib/generators/auth_assist/config/config_generator.rb +72 -0
  45. data/lib/generators/auth_assist/templates/ability.rb +22 -0
  46. data/lib/generators/auth_assist/templates/auth_assistant.rb +6 -0
  47. data/lib/generators/auth_assist/templates/permits.rb +91 -0
  48. data/lib/generators/auth_assist/templates/remove_multi_role_assignments_migration.rb +24 -0
  49. data/lib/generators/auth_assist/templates/remove_role_assignments_migration.rb +17 -0
  50. data/lib/generators/auth_assist/templates/role_assignments_migration.rb +14 -0
  51. data/lib/generators/auth_assist/templates/roles_migration.rb +13 -0
  52. data/lib/generators/auth_assist/test.rb +40 -0
  53. data/lib/generators/auth_assist/views/views_generator.rb +66 -0
  54. data/lib/generators/auth_code_refactor.rb +71 -0
  55. data/lib/generators/migration_helper.rb +81 -0
  56. data/lib/generators/reverse_migrations.rb +48 -0
  57. data/lib/generators/role_migrations.rb +167 -0
  58. data/lib/permits.rb +92 -0
  59. data/spec/auth-assistant_spec.rb +7 -0
  60. data/spec/generators/ability_gen_spec.rb +9 -0
  61. data/spec/sandbox.rb +9 -0
  62. data/spec/spec.opts +1 -0
  63. data/spec/spec_helper.rb +11 -0
  64. metadata +167 -0
@@ -0,0 +1,11 @@
1
+ <% user_block do %>
2
+ <li>
3
+ <%= link_to('Logout', destroy_user_session_path) %>
4
+ </li>
5
+ <% end %>
6
+ <% not_user_block do %>
7
+ <li>
8
+ <%= link_to('Login', new_user_session_path) %>
9
+ </li>
10
+ <% end %>
11
+
@@ -0,0 +1,10 @@
1
+ <% user_block do %>
2
+ <li>
3
+ <%= link_to('Edit registration', edit_user_registration_path) %>
4
+ </li>
5
+ <% end %>
6
+ <% not_user_block do %>
7
+ <li>
8
+ <%= link_to('Register', new_user_registration_path) %>
9
+ </li>
10
+ <% end %>
@@ -0,0 +1,115 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{auth-assistant}
8
+ s.version = "0.4.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Kristian Mandrup"]
12
+ s.date = %q{2010-05-18}
13
+ s.description = %q{Provides assistance for setting up an auth solution using devise and cancan auth frameworks}
14
+ s.email = %q{kmandrup@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".DS_Store",
21
+ ".document",
22
+ ".gitignore",
23
+ "Changelog.txt",
24
+ "LICENSE",
25
+ "README.markdown",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "app/.DS_Store",
29
+ "app/views/.DS_Store",
30
+ "app/views/auth_assist/menu/_admin_login_items.html.erb",
31
+ "app/views/auth_assist/menu/_login_items.html.erb",
32
+ "app/views/auth_assist/menu/_registration_items.html.erb",
33
+ "auth-assistant.gemspec",
34
+ "config/locales/en.yml",
35
+ "init.rb",
36
+ "lib/.DS_Store",
37
+ "lib/auth-assistant.rb",
38
+ "lib/auth_assistant/configure.rb",
39
+ "lib/auth_assistant/helpers/admin_role.rb",
40
+ "lib/auth_assistant/helpers/all.rb",
41
+ "lib/auth_assistant/helpers/localhost.rb",
42
+ "lib/auth_assistant/helpers/roles.rb",
43
+ "lib/auth_assistant/helpers/user_role.rb",
44
+ "lib/auth_assistant/model/user_config.rb",
45
+ "lib/auth_assistant/role_strategies/admin_field.rb",
46
+ "lib/auth_assistant/role_strategies/all.rb",
47
+ "lib/auth_assistant/role_strategies/multi_role_assignment.rb",
48
+ "lib/auth_assistant/role_strategies/role_assignment.rb",
49
+ "lib/auth_assistant/role_strategies/role_field.rb",
50
+ "lib/auth_assistant/role_strategies/roles_field.rb",
51
+ "lib/auth_assistant/role_strategies/roles_mask.rb",
52
+ "lib/auth_assistant/role_strategies/shared.rb",
53
+ "lib/auth_assistant/translate/authlabels.rb",
54
+ "lib/auth_assistant/view/all.rb",
55
+ "lib/auth_assistant/view/auth_menu_item.rb",
56
+ "lib/auth_assistant/view/registration_link.rb",
57
+ "lib/auth_assistant/view/rest_link.rb",
58
+ "lib/auth_assistant/view/session_link.rb",
59
+ "lib/generators/.DS_Store",
60
+ "lib/generators/auth_assist/.DS_Store",
61
+ "lib/generators/auth_assist/clear/clear_generator.rb",
62
+ "lib/generators/auth_assist/config/.DS_Store",
63
+ "lib/generators/auth_assist/config/config_generator.rb",
64
+ "lib/generators/auth_assist/templates/ability.rb",
65
+ "lib/generators/auth_assist/templates/auth_assistant.rb",
66
+ "lib/generators/auth_assist/templates/permits.rb",
67
+ "lib/generators/auth_assist/templates/remove_multi_role_assignments_migration.rb",
68
+ "lib/generators/auth_assist/templates/remove_role_assignments_migration.rb",
69
+ "lib/generators/auth_assist/templates/role_assignments_migration.rb",
70
+ "lib/generators/auth_assist/templates/roles_migration.rb",
71
+ "lib/generators/auth_assist/test.rb",
72
+ "lib/generators/auth_assist/views/views_generator.rb",
73
+ "lib/generators/auth_code_refactor.rb",
74
+ "lib/generators/migration_helper.rb",
75
+ "lib/generators/reverse_migrations.rb",
76
+ "lib/generators/role_migrations.rb",
77
+ "lib/permits.rb",
78
+ "spec/auth-assistant_spec.rb",
79
+ "spec/generators/ability_gen_spec.rb",
80
+ "spec/sandbox.rb",
81
+ "spec/spec.opts",
82
+ "spec/spec_helper.rb"
83
+ ]
84
+ s.homepage = %q{http://github.com/kristianmandrup/devise-assistant}
85
+ s.rdoc_options = ["--charset=UTF-8"]
86
+ s.require_paths = ["lib"]
87
+ s.rubygems_version = %q{1.3.6}
88
+ s.summary = %q{Provides assistance for setting up an auth solution}
89
+ s.test_files = [
90
+ "spec/auth-assistant_spec.rb",
91
+ "spec/generators/ability_gen_spec.rb",
92
+ "spec/sandbox.rb",
93
+ "spec/spec_helper.rb"
94
+ ]
95
+
96
+ if s.respond_to? :specification_version then
97
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
98
+ s.specification_version = 3
99
+
100
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
101
+ s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
102
+ s.add_runtime_dependency(%q<devise>, [">= 1.0"])
103
+ s.add_runtime_dependency(%q<cancan>, [">= 1.0"])
104
+ else
105
+ s.add_dependency(%q<rspec>, [">= 2.0.0"])
106
+ s.add_dependency(%q<devise>, [">= 1.0"])
107
+ s.add_dependency(%q<cancan>, [">= 1.0"])
108
+ end
109
+ else
110
+ s.add_dependency(%q<rspec>, [">= 2.0.0"])
111
+ s.add_dependency(%q<devise>, [">= 1.0"])
112
+ s.add_dependency(%q<cancan>, [">= 1.0"])
113
+ end
114
+ end
115
+
@@ -0,0 +1,14 @@
1
+ en:
2
+ auth_assistant:
3
+ confirm: 'Are you sure?'
4
+ actions:
5
+ index: "Index"
6
+ new: "New"
7
+ edit: "Edit"
8
+ delete: "Delete"
9
+ show: "Show"
10
+ sign_in: "Sign in"
11
+ sign_out: "Sign out"
12
+ sign_up: "Sign up"
13
+ edit_registration: "Edit registration"
14
+
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'auth-assistant'
Binary file
@@ -0,0 +1,24 @@
1
+ require 'auth_assistant/configure'
2
+
3
+ module ApplicationHelper
4
+ def self.auth_assist_helpers
5
+ include AuthAssistant::ViewHelpers
6
+ end
7
+ end
8
+
9
+ class ApplicationController
10
+ private
11
+ def current_ability
12
+ @current_ability ||= Ability.new(current_user, request)
13
+ end
14
+ end
15
+
16
+
17
+ module AuthAssistant
18
+ module ViewHelpers
19
+ include AuthAssistant::ViewHelpers::SessionLink
20
+ include AuthAssistant::ViewHelpers::RegistrationLink
21
+ include AuthAssistant::ViewHelpers::RestLink
22
+ include AuthAssistant::ViewHelpers::AuthMenuItem
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ require 'auth_assistant/helpers/all'
2
+ require 'auth_assistant/model/user_config'
3
+ require 'auth_assistant/translate/authlabels'
4
+ require 'auth_assistant/view/all'
5
+
6
+ if defined? ActionController
7
+ ActionController::Base.class_eval do
8
+ include AuthAssistant::Helpers::AdminRole
9
+ include AuthAssistant::Helpers::UserRole
10
+ include AuthAssistant::Helpers::Roles
11
+ include AuthAssistant::Helpers::LocalHost
12
+ include AuthAssistant::Helpers::AuthLabel
13
+ end
14
+ else
15
+ puts "ActionController not defined"
16
+ end
@@ -0,0 +1,59 @@
1
+ module AuthAssistant
2
+ module Helpers
3
+ module AdminRole
4
+ def admin_block(&block)
5
+ with_output_buffer(&block) if admin?
6
+ end
7
+
8
+ def not_admin_block(&block)
9
+ with_output_buffer(&block) if !admin?
10
+ end
11
+
12
+ def admin_or_owner_block(obj, &block)
13
+ if admin? || owner?(obj)
14
+ with_output_buffer(&block)
15
+ end
16
+ end
17
+
18
+ def admin?
19
+ devise_admin?(on) || cancan_admin?(on)
20
+ end
21
+
22
+ def admin_area(&block)
23
+ admin_block do
24
+ do_admin_area(&block)
25
+ end
26
+ end
27
+
28
+ def not_admin_area(&block)
29
+ not_admin_block do
30
+ do_admin_area(&block)
31
+ end
32
+ end
33
+
34
+ def self.included(base)
35
+ base.helper_method :admin_block, :not_admin_block, :admin_area, :not_admin_area, :admin_or_owner_block, :admin?
36
+ end
37
+
38
+ protected
39
+ def do_admin_area(&block)
40
+ content = with_output_buffer(&block)
41
+ content_tag :div, content, :class => 'admin'
42
+ end
43
+
44
+ def owner?(obj)
45
+ current_user == obj.user if obj.repond_to? :user
46
+ current_user == obj.owner if obj.repond_to? :owner
47
+ end
48
+
49
+ def devise_admin?
50
+ admin_signed_in? if respond_to? :admin_signed_in?
51
+ end
52
+
53
+ def cancan_admin?
54
+ current_user.admin?
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,4 @@
1
+ require 'auth_assistant/helpers/admin_role'
2
+ require 'auth_assistant/helpers/localhost'
3
+ require 'auth_assistant/helpers/roles'
4
+ require 'auth_assistant/helpers/user_role'
@@ -0,0 +1,22 @@
1
+ module AuthAssistant
2
+ module Helpers
3
+ module LocalHost
4
+ def localhost_block(&block)
5
+ with_output_buffer(&block) if localhost?
6
+ end
7
+
8
+ def not_localhost_block(&block)
9
+ with_output_buffer(&block) if !localhost?
10
+ end
11
+
12
+ def localhost?
13
+ ['localhost', '127.0.0.1'].include?(request.host)
14
+ end
15
+
16
+ def self.included(base)
17
+ base.helper_method :localhost_block, :not_localhost_block, :localhost?
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,52 @@
1
+ module AuthAssistant
2
+ module Helpers
3
+ module Roles
4
+ def roles_area(*user_roles, options, &block)
5
+ options ||= {}
6
+ roles_block user_roles do
7
+ clazz = options[:class] || 'special'
8
+ do_roles_area(clazz, &block)
9
+ end
10
+ end
11
+
12
+ def not_roles_area(*user_roles, options, &block)
13
+ options ||= {}
14
+ not_roles_block user_roles do
15
+ clazz = options[:class] || 'special'
16
+ do_roles_area(clazz, &block)
17
+ end
18
+ end
19
+
20
+ def roles_block(*user_roles, &block)
21
+ with_output_buffer(&block) if role?(user_roles)
22
+ end
23
+
24
+ def not_roles_block(*user_roles, &block)
25
+ with_output_buffer(&block) if !role?(user_roles)
26
+ end
27
+
28
+ def role?(*user_roles)
29
+ devise_role?(user_roles) || cancan_role?(user_roles)
30
+ end
31
+
32
+ def self.included(base)
33
+ base.helper_method :roles_block, :not_roles_block, :roles_area, :not_roles_area, :role?
34
+ end
35
+
36
+ protected
37
+ def do_roles_area(clazz, &block)
38
+ content = with_output_buffer(&block)
39
+ content_tag :div, content, :class => clazz
40
+ end
41
+
42
+ def devise_role?(user_roles)
43
+ user_roles.flatten.any?{|role| warden.authenticate?(:scope => role.to_sym)}
44
+ end
45
+
46
+ def cancan_role?(user_roles)
47
+ union = current_user.roles & user_roles
48
+ !union.empty?
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,47 @@
1
+ module AuthAssistant
2
+ module Helpers
3
+ module UserRole
4
+ def user_area(&block)
5
+ user_block do
6
+ do_user_area(&block)
7
+ end
8
+ end
9
+
10
+ def not_user_area(&block)
11
+ not_user_block do
12
+ do_user_area(&block)
13
+ end
14
+ end
15
+
16
+ def user_block(&block)
17
+ with_output_buffer(&block) if user?
18
+ end
19
+
20
+ def not_user_block(&block)
21
+ with_output_buffer(&block) if !user?
22
+ end
23
+
24
+ def user?
25
+ devise_user? || cancan_user?
26
+ end
27
+
28
+ def self.included(base)
29
+ base.helper_method :user_block, :not_user_block, :user_area, :not_user_area, :user?
30
+ end
31
+
32
+ protected
33
+ def do_user_area(&block)
34
+ content = with_output_buffer(&block)
35
+ content_tag :div, content, :class => 'user'
36
+ end
37
+
38
+ def devise_user?
39
+ user_signed_in? if respond_to? :user_signed_in?
40
+ end
41
+
42
+ def cancan_user?
43
+ !current_user.admin?
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,42 @@
1
+ require 'auth_assistant/role_strategies/all'
2
+ require 'singleton'
3
+
4
+ module AuthAssistant
5
+ def self.configure(&block)
6
+ block.arity < 1 ? AuthAssistant::Configuration.instance.class_eval(&block) : block.call(AuthAssistant::Configuration.instance)
7
+ end
8
+
9
+ class Configuration
10
+ include Singleton
11
+
12
+ attr_accessor :role_strategy
13
+ attr_accessor :available_roles
14
+
15
+
16
+ def available_strategies
17
+ [:admin_field, :role_field, :roles_field, :roles_mask, :role_assignment, :multi_role_assignment]
18
+ end
19
+
20
+ def strategy(name)
21
+ n = name.to_s
22
+ available_strategies.include?(n.to_sym) ? n.to_sym : :roles_field
23
+ end
24
+
25
+ def role_strategy=(strategy_name)
26
+ # puts "Applying role strategy: #{strategy_name}"
27
+
28
+ if !available_strategies.include? strategy_name.to_sym
29
+ raise UnknownStrategy, "unknown strategy: #{strategy_name.inspect}, must be one of: #{available_strategies.inspect}"
30
+ end
31
+ @role_strategy = strategy(strategy_name)
32
+ camel = @role_strategy.to_s.camelize
33
+ User.class_eval do
34
+ include AuthAssistant::RoleStrategy::Shared
35
+ include "AuthAssistant::RoleStrategy::#{camel}".constantize
36
+ set_scope if respond_to? :set_scope
37
+ set_relationships if respond_to? :set_relationships
38
+ end
39
+ end
40
+ end
41
+ end
42
+
@@ -0,0 +1,37 @@
1
+ module AuthAssistant
2
+ module RoleStrategy
3
+ module AdminField
4
+
5
+ def roles=(*roles)
6
+ new_role = roles.first.to_s
7
+ self.admin = new_role == 'admin'
8
+ end
9
+
10
+ def roles
11
+ [role]
12
+ end
13
+
14
+ def role=(role)
15
+ self.roles = [role]
16
+ end
17
+
18
+ def role
19
+ admin == true ? 'admin' : 'default'
20
+ end
21
+
22
+ def role?(_role)
23
+ role == _role.to_s
24
+ end
25
+
26
+ module ClassMethods
27
+ def set_scope
28
+ scope :with_role, lambda { |role| {:conditions => ["role == ?", role]} }
29
+ end
30
+ end
31
+
32
+ def self.included(base)
33
+ base.extend(ClassMethods)
34
+ end
35
+ end
36
+ end
37
+ end