user_impersonate 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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