user_impersonate 0.7.0 → 0.8.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.
data/README.md CHANGED
@@ -131,10 +131,16 @@ The `app/views/user_impersonate/_header.html.haml` HAML partial for this header
131
131
 
132
132
  By default, when you impersonate and when you stop impersonating a user you are redirected to the root url.
133
133
 
134
- Configure alternate paths using:
134
+ Configure alternate paths in `config/initializers/user_impersonate.rb`, which is created by the generator above.
135
135
 
136
136
  ``` ruby
137
- ???
137
+ # config/initializers/user_impersonate.rb
138
+ module UserImpersonate
139
+ class Engine < Rails::Engine
140
+ config.redirect_on_impersonate = "/"
141
+ config.redirect_on_revert = "/impersonate"
142
+ end
143
+ end
138
144
  ```
139
145
 
140
146
  ### User model & lookup
@@ -144,6 +150,7 @@ By default, it assumes the User model is `User`, that you use `User.find(id)` to
144
150
  You can fix this default behavior in `config/initializers/user_impersonate.rb`, which is created by the generator above.
145
151
 
146
152
  ``` ruby
153
+ # config/initializers/user_impersonate.rb
147
154
  module UserImpersonate
148
155
  class Engine < Rails::Engine
149
156
  config.user_class = "User"
@@ -1,4 +1,4 @@
1
1
  module UserImpersonate
2
- class ApplicationController < ActionController::Base
2
+ class ApplicationController < ::ApplicationController
3
3
  end
4
4
  end
@@ -2,7 +2,7 @@ require_dependency "user_impersonate/application_controller"
2
2
 
3
3
  module UserImpersonate
4
4
  class ImpersonateController < ApplicationController
5
- before_filter :authenticate_user!
5
+ before_filter :authenticate_the_user
6
6
  before_filter :current_user_must_be_staff!, except: ["destroy"]
7
7
 
8
8
  # Display list of all users, except current (staff) user
@@ -58,6 +58,31 @@ module UserImpersonate
58
58
  redirect_to '/'
59
59
  end
60
60
 
61
+ # current_user changes from a staff user to
62
+ # +new_user+; current user stored in +session[:staff_user_id]+
63
+ def impersonate(new_user)
64
+ session[:staff_user_id] = current_user.id #
65
+ sign_in_user new_user
66
+ end
67
+
68
+ # revert the +current_user+ back to the staff user
69
+ # stored in +session[:staff_user_id]+
70
+ def revert_impersonate
71
+ return unless current_staff_user
72
+ sign_in_user current_staff_user
73
+ session[:staff_user_id] = nil
74
+ end
75
+
76
+ def sign_in_user(user)
77
+ method = config_or_default :sign_in_user_method, "sign_in"
78
+ self.send(method.to_sym, user)
79
+ end
80
+
81
+ def authenticate_the_user
82
+ method = config_or_default :authenticate_user_method, "authenticate_user!"
83
+ self.send(method.to_sym)
84
+ end
85
+
61
86
  # Helper to load a User, using all the UserImpersonate config options
62
87
  def find_user(id)
63
88
  user_class.send(user_finder_method, id)
@@ -71,11 +96,11 @@ module UserImpersonate
71
96
  end
72
97
 
73
98
  def user_finder_method
74
- (UserImpersonate::Engine.config.try(:user_finder) || "find").to_sym
99
+ (config_or_default :user_finder, "find").to_sym
75
100
  end
76
101
 
77
102
  def user_class_name
78
- UserImpersonate::Engine.config.try(:user_class) || "User"
103
+ config_or_default :user_class, "User"
79
104
  end
80
105
 
81
106
  def user_class
@@ -87,21 +112,31 @@ module UserImpersonate
87
112
  end
88
113
 
89
114
  def user_id_column
90
- UserImpersonate::Engine.config.try(:user_id_column) || "id"
115
+ config_or_default :user_id_column, "id"
91
116
  end
92
117
 
93
118
  def user_is_staff_method
94
- UserImpersonate::Engine.config.try(:user_is_staff_method) || "staff?"
119
+ config_or_default :user_is_staff_method, "staff?"
95
120
  end
96
121
 
97
122
  def redirect_on_impersonate(impersonated_user)
98
- url = UserImpersonate::Engine.config.try(:redirect_on_impersonate) || main_app.root_url
123
+ url = config_or_default :redirect_on_impersonate, main_app.root_url
99
124
  redirect_to url
100
125
  end
101
126
 
102
127
  def redirect_on_revert(impersonated_user = nil)
103
- url = UserImpersonate::Engine.config.redirect_on_revert || root_url
128
+ url = config_or_default :redirect_on_revert, root_url
104
129
  redirect_to url
105
130
  end
131
+
132
+ # gets overridden config value for engine, else returns default
133
+ def config_or_default(attribute, default)
134
+ attribute = attribute.to_sym
135
+ if UserImpersonate::Engine.config.respond_to?(attribute)
136
+ UserImpersonate::Engine.config.send(attribute)
137
+ else
138
+ default
139
+ end
140
+ end
106
141
  end
107
142
  end
@@ -1,4 +1,11 @@
1
1
  module UserImpersonate
2
2
  module ApplicationHelper
3
+ def current_staff_user
4
+ return unless session[:staff_user_id]
5
+ user_finder_method = (UserImpersonate::Engine.config.user_finder || "find").to_sym
6
+ user_class_name = UserImpersonate::Engine.config.user_class || "User"
7
+ user_class = user_class_name.constantize
8
+ @staff_user ||= user_class.send(user_finder_method, session[:staff_user_id])
9
+ end
3
10
  end
4
11
  end
@@ -7,5 +7,8 @@ module UserImpersonate
7
7
 
8
8
  config.redirect_on_impersonate = "/"
9
9
  config.redirect_on_revert = "/impersonate"
10
+
11
+ config.authenticate_user_method = "authenticate_user!" # protect impersonation controller
12
+ config.sign_in_user_method = "sign_in" # sign_in(user)
10
13
  end
11
14
  end
@@ -8,5 +8,10 @@ module UserImpersonate
8
8
  Devise.include_helpers(UserImpersonate::DeviseHelpers)
9
9
  end
10
10
  end
11
+
12
+ config.to_prepare do
13
+ ::ApplicationController.helper(UserImpersonate::ApplicationHelper)
14
+ ::ApplicationController.send(:include, UserImpersonate::ApplicationHelper)
15
+ end
11
16
  end
12
17
  end
@@ -1,3 +1,3 @@
1
1
  module UserImpersonate
2
- VERSION = "0.7.0"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -10078,3 +10078,70 @@ Processing by HomeController#index as HTML
10078
10078
  Rendered home/index.html.erb within layouts/application (1.1ms)
10079
10079
  Completed 200 OK in 2ms (Views: 2.0ms | ActiveRecord: 0.1ms)
10080
10080
   (1.8ms) rollback transaction
10081
+ Connecting to database specified by database.yml
10082
+  (10.2ms) begin transaction
10083
+  (0.1ms) SAVEPOINT active_record_1
10084
+ Fixture Delete (0.4ms) DELETE FROM "users"
10085
+ Fixture Insert (0.7ms) INSERT INTO "users" ("id", "name", "email", "staff", "encrypted_password", "created_at", "updated_at") VALUES (1, 'Dr Nic Williams', 'drnicwilliams@gmail.com', 't', '$2a$10$HV6E2Hgk2z6hqow76r6IL.5gcnqCSqJYuOuOT.nbqdPffBLvwglzK', '2012-09-19 23:09:52', '2012-09-19 23:09:52')
10086
+ Fixture Insert (0.1ms) INSERT INTO "users" ("id", "name", "email", "encrypted_password", "created_at", "updated_at") VALUES (2, 'Normal User', 'normaluser@gmail.com', '$2a$10$HV6E2Hgk2z6hqow76r6IL.5gcnqCSqJYuOuOT.nbqdPffBLvwglzK', '2012-09-19 23:09:52', '2012-09-19 23:09:52')
10087
+  (0.0ms) RELEASE SAVEPOINT active_record_1
10088
+ User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."name" = 'Normal User' LIMIT 1
10089
+
10090
+
10091
+ Started GET "/users/sign_in" for 127.0.0.1 at 2012-09-19 16:09:53 -0700
10092
+ Processing by Devise::SessionsController#new as HTML
10093
+ Rendered /Users/drnic/.rvm/gems/ruby-1.9.3-p194@global/gems/devise-2.1.2/app/views/devise/shared/_links.erb (1.6ms)
10094
+ Rendered /Users/drnic/.rvm/gems/ruby-1.9.3-p194@global/gems/devise-2.1.2/app/views/devise/sessions/new.html.erb within layouts/application (22.0ms)
10095
+ Completed 200 OK in 37ms (Views: 36.4ms | ActiveRecord: 0.0ms)
10096
+
10097
+
10098
+ Started POST "/users/sign_in" for 127.0.0.1 at 2012-09-19 16:09:53 -0700
10099
+ Processing by Devise::SessionsController#create as HTML
10100
+ Parameters: {"utf8"=>"✓", "user"=>{"email"=>"normaluser@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
10101
+ User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'normaluser@gmail.com' LIMIT 1
10102
+  (0.1ms) SAVEPOINT active_record_1
10103
+  (0.4ms) UPDATE "users" SET "last_sign_in_at" = '2012-09-19 23:09:53.322713', "current_sign_in_at" = '2012-09-19 23:09:53.322713', "last_sign_in_ip" = '127.0.0.1', "current_sign_in_ip" = '127.0.0.1', "sign_in_count" = 1, "updated_at" = '2012-09-19 23:09:53.323719' WHERE "users"."id" = 2
10104
+  (0.0ms) RELEASE SAVEPOINT active_record_1
10105
+ Redirected to http://www.example.com/
10106
+ Completed 302 Found in 104ms (ActiveRecord: 0.0ms)
10107
+
10108
+
10109
+ Started GET "/" for 127.0.0.1 at 2012-09-19 16:09:53 -0700
10110
+ Processing by HomeController#index as HTML
10111
+ User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
10112
+ Rendered home/index.html.erb within layouts/application (2.0ms)
10113
+ Completed 200 OK in 6ms (Views: 5.1ms | ActiveRecord: 0.2ms)
10114
+  (0.4ms) rollback transaction
10115
+  (0.1ms) begin transaction
10116
+  (0.1ms) SAVEPOINT active_record_1
10117
+ Fixture Delete (0.2ms) DELETE FROM "users"
10118
+ Fixture Insert (0.1ms) INSERT INTO "users" ("id", "name", "email", "staff", "encrypted_password", "created_at", "updated_at") VALUES (1, 'Dr Nic Williams', 'drnicwilliams@gmail.com', 't', '$2a$10$HV6E2Hgk2z6hqow76r6IL.5gcnqCSqJYuOuOT.nbqdPffBLvwglzK', '2012-09-19 23:09:53', '2012-09-19 23:09:53')
10119
+ Fixture Insert (0.1ms) INSERT INTO "users" ("id", "name", "email", "encrypted_password", "created_at", "updated_at") VALUES (2, 'Normal User', 'normaluser@gmail.com', '$2a$10$HV6E2Hgk2z6hqow76r6IL.5gcnqCSqJYuOuOT.nbqdPffBLvwglzK', '2012-09-19 23:09:53', '2012-09-19 23:09:53')
10120
+  (0.0ms) RELEASE SAVEPOINT active_record_1
10121
+ User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."name" = 'Dr Nic Williams' LIMIT 1
10122
+
10123
+
10124
+ Started GET "/users/sign_in" for 127.0.0.1 at 2012-09-19 16:09:53 -0700
10125
+ Processing by Devise::SessionsController#new as HTML
10126
+ Rendered /Users/drnic/.rvm/gems/ruby-1.9.3-p194@global/gems/devise-2.1.2/app/views/devise/shared/_links.erb (0.4ms)
10127
+ Rendered /Users/drnic/.rvm/gems/ruby-1.9.3-p194@global/gems/devise-2.1.2/app/views/devise/sessions/new.html.erb within layouts/application (2.8ms)
10128
+ Completed 200 OK in 5ms (Views: 4.1ms | ActiveRecord: 0.0ms)
10129
+
10130
+
10131
+ Started POST "/users/sign_in" for 127.0.0.1 at 2012-09-19 16:09:53 -0700
10132
+ Processing by Devise::SessionsController#create as HTML
10133
+ Parameters: {"utf8"=>"✓", "user"=>{"email"=>"drnicwilliams@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
10134
+ User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'drnicwilliams@gmail.com' LIMIT 1
10135
+  (0.1ms) SAVEPOINT active_record_1
10136
+  (0.3ms) UPDATE "users" SET "last_sign_in_at" = '2012-09-19 23:09:53.497475', "current_sign_in_at" = '2012-09-19 23:09:53.497475', "last_sign_in_ip" = '127.0.0.1', "current_sign_in_ip" = '127.0.0.1', "sign_in_count" = 1, "updated_at" = '2012-09-19 23:09:53.498065' WHERE "users"."id" = 1
10137
+  (0.0ms) RELEASE SAVEPOINT active_record_1
10138
+ Redirected to http://www.example.com/
10139
+ Completed 302 Found in 91ms (ActiveRecord: 0.0ms)
10140
+
10141
+
10142
+ Started GET "/" for 127.0.0.1 at 2012-09-19 16:09:53 -0700
10143
+ Processing by HomeController#index as HTML
10144
+ User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
10145
+ Rendered home/index.html.erb within layouts/application (1.5ms)
10146
+ Completed 200 OK in 3ms (Views: 2.6ms | ActiveRecord: 0.1ms)
10147
+  (1.9ms) rollback transaction
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: user_impersonate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 3.2.8
22
+ version: 3.2.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,7 +27,7 @@ dependencies:
27
27
  requirements:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
- version: 3.2.8
30
+ version: 3.2.0
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: sqlite3
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -279,7 +279,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
279
279
  version: '0'
280
280
  segments:
281
281
  - 0
282
- hash: -2825731515616564782
282
+ hash: 36552099061295841
283
283
  required_rubygems_version: !ruby/object:Gem::Requirement
284
284
  none: false
285
285
  requirements:
@@ -288,7 +288,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
288
288
  version: '0'
289
289
  segments:
290
290
  - 0
291
- hash: -2825731515616564782
291
+ hash: 36552099061295841
292
292
  requirements: []
293
293
  rubyforge_project:
294
294
  rubygems_version: 1.8.24