devise_masquerade 0.6.4 → 1.2.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.
Potentially problematic release.
This version of devise_masquerade might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.gitignore +1 -2
- data/.ruby-version +1 -1
- data/.travis.yml +2 -4
- data/Gemfile +14 -10
- data/Gemfile.lock +303 -0
- data/Makefile +6 -1
- data/README.md +25 -1
- data/app/controllers/devise/masquerades_controller.rb +70 -54
- data/devise_masquerade.gemspec +4 -4
- data/features/back.feature +0 -1
- data/features/multiple_masquerading_models.feature +17 -0
- data/features/step_definitions/auth_steps.rb +1 -0
- data/features/step_definitions/back_steps.rb +18 -3
- data/features/support/env.rb +23 -4
- data/lib/devise_masquerade/controllers/helpers.rb +26 -7
- data/lib/devise_masquerade/controllers/url_helpers.rb +19 -4
- data/lib/devise_masquerade/models/masqueradable.rb +47 -0
- data/lib/devise_masquerade/models.rb +9 -0
- data/lib/devise_masquerade/rails.rb +14 -4
- data/lib/devise_masquerade/routes.rb +10 -8
- data/lib/devise_masquerade/version.rb +1 -1
- data/lib/devise_masquerade.rb +3 -9
- data/spec/controllers/admin/dashboard_controller_spec.rb +5 -4
- data/spec/controllers/dashboard_controller_spec.rb +4 -4
- data/spec/controllers/devise/masquerades_controller_spec.rb +60 -36
- data/spec/controllers/{masquerades_controller_spec.rb → masquerades_tests_controller_spec.rb} +11 -8
- data/spec/dummy/app/controllers/admin/dashboard_controller.rb +1 -2
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/controllers/dashboard_controller.rb +1 -2
- data/spec/dummy/app/controllers/masquerades_tests_controller.rb +7 -0
- data/spec/dummy/app/controllers/students_controller.rb +8 -0
- data/spec/dummy/app/models/admin/user.rb +0 -7
- data/spec/dummy/app/models/student.rb +3 -0
- data/spec/dummy/app/models/user.rb +1 -10
- data/spec/dummy/app/views/admin/dashboard/index.html.erb +0 -2
- data/spec/dummy/app/views/dashboard/index.html.erb +0 -2
- data/spec/dummy/app/views/layouts/application.html.erb +7 -1
- data/spec/dummy/app/views/students/_student.html.erb +6 -0
- data/spec/dummy/app/views/students/index.html.erb +1 -0
- data/spec/dummy/app/views/users/_user.html.erb +1 -1
- data/spec/dummy/config/application.rb +2 -0
- data/spec/dummy/config/environment.rb +1 -0
- data/spec/dummy/config/routes.rb +6 -4
- data/spec/dummy/db/.gitignore +1 -0
- data/spec/dummy/db/migrate/20121119085620_devise_create_users.rb +1 -1
- data/spec/dummy/db/migrate/20140418160449_create_admin_users.rb +1 -1
- data/spec/dummy/db/migrate/20191022100000_create_students.rb +14 -0
- data/spec/dummy/db/schema.rb +37 -31
- data/spec/models/user_spec.rb +1 -1
- data/spec/orm/active_record.rb +5 -2
- data/spec/spec_helper.rb +3 -3
- data/spec/support/factories.rb +13 -9
- metadata +31 -16
- data/lib/devise_masquerade/model.rb +0 -42
- data/spec/dummy/app/controllers/masquerades_controller.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a3d9619a76cbee988888a5168f0cf57b74a59fd7b5c3cfbbac3113458c5cb60c
|
4
|
+
data.tar.gz: 9d04f07b596f095533e4e766f0ed1e0672f0078ae5fcecf696571326ed3d3b8d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82d09ecc8063ce935f4125d7c8ecd73772a5d7ad5e5a9e6a909cb18e899793229a473ffdceb6a1c5a1eb36ddd244c2646f248e205f62b4d0c70ad47ef1cadbe9
|
7
|
+
data.tar.gz: 8c9456b986f8761a5258d1099777d0e8a0d71974de41e1e220c50e6cd7cfec362956d5f41b7ab1466cddbc7d49c350c04febe852f9920bca99a27c1e043ce024
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.0
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -4,10 +4,10 @@ source 'https://rubygems.org'
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :test do
|
7
|
-
gem 'activerecord', '
|
8
|
-
gem 'actionmailer', '
|
9
|
-
gem
|
10
|
-
gem 'sqlite3'
|
7
|
+
gem 'activerecord', '>= 5.2'
|
8
|
+
gem 'actionmailer', '>= 5.2'
|
9
|
+
gem 'bson_ext', '~> 1.3'
|
10
|
+
gem 'sqlite3', '~> 1.4'
|
11
11
|
|
12
12
|
gem 'test-unit'
|
13
13
|
|
@@ -15,21 +15,25 @@ group :test do
|
|
15
15
|
gem 'pry-byebug'
|
16
16
|
|
17
17
|
gem 'guard'
|
18
|
-
gem 'guard-rspec'
|
18
|
+
gem 'guard-rspec', '~> 4.7'
|
19
19
|
gem 'guard-bundler'
|
20
20
|
gem 'guard-cucumber'
|
21
21
|
|
22
|
-
gem 'rspec
|
23
|
-
gem 'rspec'
|
24
|
-
gem 'rspec-
|
22
|
+
gem 'rspec', github: 'rspec/rspec'
|
23
|
+
gem 'rspec-core', github: 'rspec/rspec-core'
|
24
|
+
gem 'rspec-expectations', github: 'rspec/rspec-expectations'
|
25
|
+
gem 'rspec-mocks', github: 'rspec/rspec-mocks'
|
26
|
+
gem 'rspec-rails', github: 'rspec/rspec-rails'
|
27
|
+
gem 'rspec-support', github: 'rspec/rspec-support'
|
25
28
|
|
26
29
|
gem 'shoulda'
|
27
30
|
gem 'rb-fsevent'
|
28
|
-
gem '
|
31
|
+
gem 'factory_bot_rails'
|
29
32
|
gem 'database_cleaner', '< 1.1.0'
|
30
33
|
gem 'cucumber'
|
31
34
|
gem 'cucumber-rails'
|
32
35
|
gem 'capybara'
|
33
|
-
gem '
|
36
|
+
gem 'selenium-webdriver'
|
37
|
+
gem 'chromedriver-helper'
|
34
38
|
gem 'launchy'
|
35
39
|
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,303 @@
|
|
1
|
+
GIT
|
2
|
+
remote: https://github.com/rspec/rspec-core.git
|
3
|
+
revision: b7067c5da4fde57cbbff739b168008482e61db44
|
4
|
+
specs:
|
5
|
+
rspec-core (3.10.0.pre)
|
6
|
+
rspec-support (= 3.10.0.pre)
|
7
|
+
|
8
|
+
GIT
|
9
|
+
remote: https://github.com/rspec/rspec-expectations.git
|
10
|
+
revision: 99f9bcaff2a6f3d82f4e350e829eca6ab015694f
|
11
|
+
specs:
|
12
|
+
rspec-expectations (3.10.0.pre)
|
13
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
14
|
+
rspec-support (= 3.10.0.pre)
|
15
|
+
|
16
|
+
GIT
|
17
|
+
remote: https://github.com/rspec/rspec-mocks.git
|
18
|
+
revision: 5b897e8f74f3059aef43f1ed5f91719f2267a04e
|
19
|
+
specs:
|
20
|
+
rspec-mocks (3.10.0.pre)
|
21
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
22
|
+
rspec-support (= 3.10.0.pre)
|
23
|
+
|
24
|
+
GIT
|
25
|
+
remote: https://github.com/rspec/rspec-rails.git
|
26
|
+
revision: 9b7ab39c027a8cb25e2ebe9e0e985756025b0549
|
27
|
+
specs:
|
28
|
+
rspec-rails (4.0.0.pre)
|
29
|
+
actionpack (>= 4.2)
|
30
|
+
activesupport (>= 4.2)
|
31
|
+
railties (>= 4.2)
|
32
|
+
rspec-core (= 3.10.0.pre)
|
33
|
+
rspec-expectations (= 3.10.0.pre)
|
34
|
+
rspec-mocks (= 3.10.0.pre)
|
35
|
+
rspec-support (= 3.10.0.pre)
|
36
|
+
|
37
|
+
GIT
|
38
|
+
remote: https://github.com/rspec/rspec-support.git
|
39
|
+
revision: 673133cdd13b17077b3d88ece8d7380821f8d7dc
|
40
|
+
specs:
|
41
|
+
rspec-support (3.10.0.pre)
|
42
|
+
|
43
|
+
GIT
|
44
|
+
remote: https://github.com/rspec/rspec.git
|
45
|
+
revision: e1c2c6bd78c849d7956431331f32ba5092951dab
|
46
|
+
specs:
|
47
|
+
rspec (3.10.0.pre)
|
48
|
+
rspec-core (= 3.10.0.pre)
|
49
|
+
rspec-expectations (= 3.10.0.pre)
|
50
|
+
rspec-mocks (= 3.10.0.pre)
|
51
|
+
|
52
|
+
PATH
|
53
|
+
remote: .
|
54
|
+
specs:
|
55
|
+
devise_masquerade (1.2.0)
|
56
|
+
devise (>= 4.7.0)
|
57
|
+
railties (>= 5.2.0)
|
58
|
+
|
59
|
+
GEM
|
60
|
+
remote: https://rubygems.org/
|
61
|
+
specs:
|
62
|
+
actionmailer (6.0.0)
|
63
|
+
actionpack (= 6.0.0)
|
64
|
+
actionview (= 6.0.0)
|
65
|
+
activejob (= 6.0.0)
|
66
|
+
mail (~> 2.5, >= 2.5.4)
|
67
|
+
rails-dom-testing (~> 2.0)
|
68
|
+
actionpack (6.0.0)
|
69
|
+
actionview (= 6.0.0)
|
70
|
+
activesupport (= 6.0.0)
|
71
|
+
rack (~> 2.0)
|
72
|
+
rack-test (>= 0.6.3)
|
73
|
+
rails-dom-testing (~> 2.0)
|
74
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
75
|
+
actionview (6.0.0)
|
76
|
+
activesupport (= 6.0.0)
|
77
|
+
builder (~> 3.1)
|
78
|
+
erubi (~> 1.4)
|
79
|
+
rails-dom-testing (~> 2.0)
|
80
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
81
|
+
activejob (6.0.0)
|
82
|
+
activesupport (= 6.0.0)
|
83
|
+
globalid (>= 0.3.6)
|
84
|
+
activemodel (6.0.0)
|
85
|
+
activesupport (= 6.0.0)
|
86
|
+
activerecord (6.0.0)
|
87
|
+
activemodel (= 6.0.0)
|
88
|
+
activesupport (= 6.0.0)
|
89
|
+
activesupport (6.0.0)
|
90
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
91
|
+
i18n (>= 0.7, < 2)
|
92
|
+
minitest (~> 5.1)
|
93
|
+
tzinfo (~> 1.1)
|
94
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
95
|
+
addressable (2.7.0)
|
96
|
+
public_suffix (>= 2.0.2, < 5.0)
|
97
|
+
archive-zip (0.12.0)
|
98
|
+
io-like (~> 0.3.0)
|
99
|
+
backports (3.15.0)
|
100
|
+
bcrypt (3.1.13)
|
101
|
+
bson (1.12.5)
|
102
|
+
bson_ext (1.12.5)
|
103
|
+
bson (~> 1.12.5)
|
104
|
+
builder (3.2.3)
|
105
|
+
byebug (11.0.1)
|
106
|
+
capybara (3.29.0)
|
107
|
+
addressable
|
108
|
+
mini_mime (>= 0.1.3)
|
109
|
+
nokogiri (~> 1.8)
|
110
|
+
rack (>= 1.6.0)
|
111
|
+
rack-test (>= 0.6.3)
|
112
|
+
regexp_parser (~> 1.5)
|
113
|
+
xpath (~> 3.2)
|
114
|
+
childprocess (3.0.0)
|
115
|
+
chromedriver-helper (2.1.1)
|
116
|
+
archive-zip (~> 0.10)
|
117
|
+
nokogiri (~> 1.8)
|
118
|
+
coderay (1.1.2)
|
119
|
+
concurrent-ruby (1.1.5)
|
120
|
+
crass (1.0.5)
|
121
|
+
cucumber (3.1.2)
|
122
|
+
builder (>= 2.1.2)
|
123
|
+
cucumber-core (~> 3.2.0)
|
124
|
+
cucumber-expressions (~> 6.0.1)
|
125
|
+
cucumber-wire (~> 0.0.1)
|
126
|
+
diff-lcs (~> 1.3)
|
127
|
+
gherkin (~> 5.1.0)
|
128
|
+
multi_json (>= 1.7.5, < 2.0)
|
129
|
+
multi_test (>= 0.1.2)
|
130
|
+
cucumber-core (3.2.1)
|
131
|
+
backports (>= 3.8.0)
|
132
|
+
cucumber-tag_expressions (~> 1.1.0)
|
133
|
+
gherkin (~> 5.0)
|
134
|
+
cucumber-expressions (6.0.1)
|
135
|
+
cucumber-rails (1.8.0)
|
136
|
+
capybara (>= 2.12, < 4)
|
137
|
+
cucumber (>= 3.0.2, < 4)
|
138
|
+
mime-types (>= 2.0, < 4)
|
139
|
+
nokogiri (~> 1.8)
|
140
|
+
railties (>= 4.2, < 7)
|
141
|
+
cucumber-tag_expressions (1.1.1)
|
142
|
+
cucumber-wire (0.0.1)
|
143
|
+
database_cleaner (1.0.1)
|
144
|
+
devise (4.7.1)
|
145
|
+
bcrypt (~> 3.0)
|
146
|
+
orm_adapter (~> 0.1)
|
147
|
+
railties (>= 4.1.0)
|
148
|
+
responders
|
149
|
+
warden (~> 1.2.3)
|
150
|
+
diff-lcs (1.3)
|
151
|
+
erubi (1.9.0)
|
152
|
+
factory_bot (5.1.1)
|
153
|
+
activesupport (>= 4.2.0)
|
154
|
+
factory_bot_rails (5.1.1)
|
155
|
+
factory_bot (~> 5.1.0)
|
156
|
+
railties (>= 4.2.0)
|
157
|
+
ffi (1.11.1)
|
158
|
+
formatador (0.2.5)
|
159
|
+
gherkin (5.1.0)
|
160
|
+
globalid (0.4.2)
|
161
|
+
activesupport (>= 4.2.0)
|
162
|
+
guard (2.15.1)
|
163
|
+
formatador (>= 0.2.4)
|
164
|
+
listen (>= 2.7, < 4.0)
|
165
|
+
lumberjack (>= 1.0.12, < 2.0)
|
166
|
+
nenv (~> 0.1)
|
167
|
+
notiffany (~> 0.0)
|
168
|
+
pry (>= 0.9.12)
|
169
|
+
shellany (~> 0.0)
|
170
|
+
thor (>= 0.18.1)
|
171
|
+
guard-bundler (2.2.1)
|
172
|
+
bundler (>= 1.3.0, < 3)
|
173
|
+
guard (~> 2.2)
|
174
|
+
guard-compat (~> 1.1)
|
175
|
+
guard-compat (1.2.1)
|
176
|
+
guard-cucumber (1.5.4)
|
177
|
+
cucumber (>= 1.3.0)
|
178
|
+
guard-compat (~> 1.0)
|
179
|
+
nenv (~> 0.1)
|
180
|
+
guard-rspec (4.7.3)
|
181
|
+
guard (~> 2.1)
|
182
|
+
guard-compat (~> 1.1)
|
183
|
+
rspec (>= 2.99.0, < 4.0)
|
184
|
+
i18n (1.7.0)
|
185
|
+
concurrent-ruby (~> 1.0)
|
186
|
+
io-like (0.3.0)
|
187
|
+
launchy (2.4.3)
|
188
|
+
addressable (~> 2.3)
|
189
|
+
listen (3.2.0)
|
190
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
191
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
192
|
+
loofah (2.3.0)
|
193
|
+
crass (~> 1.0.2)
|
194
|
+
nokogiri (>= 1.5.9)
|
195
|
+
lumberjack (1.0.13)
|
196
|
+
mail (2.7.1)
|
197
|
+
mini_mime (>= 0.1.1)
|
198
|
+
method_source (0.9.2)
|
199
|
+
mime-types (3.3)
|
200
|
+
mime-types-data (~> 3.2015)
|
201
|
+
mime-types-data (3.2019.1009)
|
202
|
+
mini_mime (1.0.2)
|
203
|
+
mini_portile2 (2.4.0)
|
204
|
+
minitest (5.12.2)
|
205
|
+
multi_json (1.14.1)
|
206
|
+
multi_test (0.1.2)
|
207
|
+
nenv (0.3.0)
|
208
|
+
nokogiri (1.10.4)
|
209
|
+
mini_portile2 (~> 2.4.0)
|
210
|
+
notiffany (0.1.3)
|
211
|
+
nenv (~> 0.1)
|
212
|
+
shellany (~> 0.0)
|
213
|
+
orm_adapter (0.5.0)
|
214
|
+
power_assert (1.1.5)
|
215
|
+
pry (0.12.2)
|
216
|
+
coderay (~> 1.1.0)
|
217
|
+
method_source (~> 0.9.0)
|
218
|
+
pry-byebug (3.7.0)
|
219
|
+
byebug (~> 11.0)
|
220
|
+
pry (~> 0.10)
|
221
|
+
public_suffix (4.0.1)
|
222
|
+
rack (2.0.7)
|
223
|
+
rack-test (1.1.0)
|
224
|
+
rack (>= 1.0, < 3)
|
225
|
+
rails-dom-testing (2.0.3)
|
226
|
+
activesupport (>= 4.2.0)
|
227
|
+
nokogiri (>= 1.6)
|
228
|
+
rails-html-sanitizer (1.3.0)
|
229
|
+
loofah (~> 2.3)
|
230
|
+
railties (6.0.0)
|
231
|
+
actionpack (= 6.0.0)
|
232
|
+
activesupport (= 6.0.0)
|
233
|
+
method_source
|
234
|
+
rake (>= 0.8.7)
|
235
|
+
thor (>= 0.20.3, < 2.0)
|
236
|
+
rake (13.0.0)
|
237
|
+
rb-fsevent (0.10.3)
|
238
|
+
rb-inotify (0.10.0)
|
239
|
+
ffi (~> 1.0)
|
240
|
+
regexp_parser (1.6.0)
|
241
|
+
responders (3.0.0)
|
242
|
+
actionpack (>= 5.0)
|
243
|
+
railties (>= 5.0)
|
244
|
+
rubyzip (2.0.0)
|
245
|
+
selenium-webdriver (3.142.6)
|
246
|
+
childprocess (>= 0.5, < 4.0)
|
247
|
+
rubyzip (>= 1.2.2)
|
248
|
+
shellany (0.0.1)
|
249
|
+
shoulda (3.6.0)
|
250
|
+
shoulda-context (~> 1.0, >= 1.0.1)
|
251
|
+
shoulda-matchers (~> 3.0)
|
252
|
+
shoulda-context (1.2.2)
|
253
|
+
shoulda-matchers (3.1.3)
|
254
|
+
activesupport (>= 4.0.0)
|
255
|
+
sqlite3 (1.4.1)
|
256
|
+
test-unit (3.3.4)
|
257
|
+
power_assert
|
258
|
+
thor (0.20.3)
|
259
|
+
thread_safe (0.3.6)
|
260
|
+
tzinfo (1.2.5)
|
261
|
+
thread_safe (~> 0.1)
|
262
|
+
warden (1.2.8)
|
263
|
+
rack (>= 2.0.6)
|
264
|
+
xpath (3.2.0)
|
265
|
+
nokogiri (~> 1.8)
|
266
|
+
zeitwerk (2.2.0)
|
267
|
+
|
268
|
+
PLATFORMS
|
269
|
+
ruby
|
270
|
+
|
271
|
+
DEPENDENCIES
|
272
|
+
actionmailer (>= 5.2)
|
273
|
+
activerecord (>= 5.2)
|
274
|
+
bson_ext (~> 1.3)
|
275
|
+
bundler (>= 2.0.0)
|
276
|
+
capybara
|
277
|
+
chromedriver-helper
|
278
|
+
cucumber
|
279
|
+
cucumber-rails
|
280
|
+
database_cleaner (< 1.1.0)
|
281
|
+
devise_masquerade!
|
282
|
+
factory_bot_rails
|
283
|
+
guard
|
284
|
+
guard-bundler
|
285
|
+
guard-cucumber
|
286
|
+
guard-rspec (~> 4.7)
|
287
|
+
launchy
|
288
|
+
pry
|
289
|
+
pry-byebug
|
290
|
+
rb-fsevent
|
291
|
+
rspec!
|
292
|
+
rspec-core!
|
293
|
+
rspec-expectations!
|
294
|
+
rspec-mocks!
|
295
|
+
rspec-rails!
|
296
|
+
rspec-support!
|
297
|
+
selenium-webdriver
|
298
|
+
shoulda
|
299
|
+
sqlite3 (~> 1.4)
|
300
|
+
test-unit
|
301
|
+
|
302
|
+
BUNDLED WITH
|
303
|
+
2.0.2
|
data/Makefile
CHANGED
data/README.md
CHANGED
@@ -33,18 +33,30 @@ In the view you can use url helper for defining link:
|
|
33
33
|
|
34
34
|
= link_to "Login As", masquerade_path(user)
|
35
35
|
|
36
|
+
`masquerade_path` would create specific `/masquerade` path with query params `masquerade`(key) and `masqueraded_resource_class` to know
|
37
|
+
which model to choose to search and sign in by masquerade key.
|
38
|
+
|
36
39
|
In the model you'll need to add the parameter :masqueradable to the existing comma separated values in the devise method:
|
37
40
|
|
38
41
|
```ruby
|
39
42
|
devise :invitable, :confirmable, :database_authenticatable, :registerable, :masqueradable
|
40
43
|
```
|
41
44
|
|
42
|
-
Add into your application_controller.rb
|
45
|
+
Add into your `application_controller.rb` if you want to have custom way on sign in by using masquerade token otherwise you can still
|
46
|
+
use only `masquerade_path` in your view to generate temporary token and link to make `Login As`:
|
43
47
|
|
44
48
|
```ruby
|
45
49
|
before_action :masquerade_user!
|
46
50
|
```
|
47
51
|
|
52
|
+
or
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
before_action :masquerade!
|
56
|
+
```
|
57
|
+
|
58
|
+
`masquerade!` is generic way in case if you want to support multiple models on masquerade.
|
59
|
+
|
48
60
|
Instead of user you can use your resource name admin, student or another names.
|
49
61
|
|
50
62
|
If you want to back to the owner of masquerade action user you could use
|
@@ -109,6 +121,18 @@ In your view:
|
|
109
121
|
end
|
110
122
|
```
|
111
123
|
|
124
|
+
## Custom url redirect after finishing masquerade:
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
class Admin::MasqueradesController < Devise::MasqueradesController
|
128
|
+
protected
|
129
|
+
|
130
|
+
def after_back_masquerade_path_for(resource)
|
131
|
+
"/custom_url"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
```
|
135
|
+
|
112
136
|
## Overriding the finder
|
113
137
|
|
114
138
|
For example, if you use FriendlyId:
|
@@ -1,68 +1,49 @@
|
|
1
1
|
class Devise::MasqueradesController < DeviseController
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
Devise.mappings.each do |name, _|
|
3
|
+
class_eval <<-METHODS, __FILE__, __LINE__ + 1
|
4
|
+
skip_before_action :masquerade_#{name}!, raise: false
|
5
|
+
METHODS
|
6
6
|
end
|
7
|
+
skip_before_action :masquerade!, raise: false
|
7
8
|
|
8
|
-
|
9
|
-
before_action :save_masquerade_owner_session, :only => :show
|
10
|
-
else
|
11
|
-
before_filter :save_masquerade_owner_session, :only => :show
|
12
|
-
end
|
9
|
+
prepend_before_action :authenticate_scope!, :masquerade_authorize!
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
after_filter :cleanup_masquerade_owner_session, :only => :back
|
18
|
-
end
|
11
|
+
before_action :save_masquerade_owner_session, only: :show
|
12
|
+
|
13
|
+
after_action :cleanup_masquerade_owner_session, only: :back
|
19
14
|
|
20
15
|
def show
|
21
16
|
self.resource = find_resource
|
22
17
|
|
23
|
-
unless
|
18
|
+
unless resource
|
24
19
|
flash[:error] = "#{masqueraded_resource_class} not found."
|
25
20
|
redirect_to(new_user_session_path) and return
|
26
21
|
end
|
27
22
|
|
28
|
-
|
29
|
-
request.env["devise.skip_trackable"] = "1"
|
23
|
+
request.env['devise.skip_trackable'] = '1'
|
30
24
|
|
31
|
-
masquerade_sign_in(
|
25
|
+
masquerade_sign_in(resource)
|
32
26
|
|
33
|
-
|
34
|
-
redirect_back(fallback_location: after_masquerade_full_path_for(resource))
|
35
|
-
elsif Devise.masquerade_routes_back && request.env['HTTP_REFERER'].present?
|
36
|
-
redirect_to :back
|
37
|
-
else
|
38
|
-
redirect_to(after_masquerade_full_path_for(resource))
|
39
|
-
end
|
27
|
+
go_back(resource, path: after_masquerade_full_path_for(resource))
|
40
28
|
end
|
41
29
|
|
42
30
|
def back
|
43
31
|
user_id = session[session_key]
|
44
32
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
33
|
+
resource = if user_id.present?
|
34
|
+
masquerading_resource_class.to_adapter.find_first(:id => user_id)
|
35
|
+
else
|
36
|
+
send(:"current_#{masquerading_resource_name}")
|
37
|
+
end
|
50
38
|
|
51
39
|
if masquerading_resource_class != masqueraded_resource_class
|
52
40
|
sign_out(send("current_#{masqueraded_resource_name}"))
|
53
41
|
end
|
54
42
|
|
55
|
-
masquerade_sign_in(
|
56
|
-
request.env[
|
43
|
+
masquerade_sign_in(resource)
|
44
|
+
request.env['devise.skip_trackable'] = nil
|
57
45
|
|
58
|
-
|
59
|
-
# If using the masquerade_routes_back and Rails 5
|
60
|
-
redirect_back(fallback_location: after_back_masquerade_path_for(owner_user))
|
61
|
-
elsif Devise.masquerade_routes_back && request.env['HTTP_REFERER'].present?
|
62
|
-
redirect_to :back
|
63
|
-
else
|
64
|
-
redirect_to after_back_masquerade_path_for(owner_user)
|
65
|
-
end
|
46
|
+
go_back(resource, path: after_back_masquerade_path_for(resource))
|
66
47
|
end
|
67
48
|
|
68
49
|
protected
|
@@ -76,13 +57,34 @@ class Devise::MasqueradesController < DeviseController
|
|
76
57
|
end
|
77
58
|
|
78
59
|
def find_resource
|
79
|
-
masqueraded_resource_class.
|
60
|
+
masqueraded_resource_class.
|
61
|
+
find_by_masquerade_key(params[Devise.masquerade_param]).
|
62
|
+
where(id: params[:id]).
|
63
|
+
first
|
64
|
+
end
|
65
|
+
|
66
|
+
def go_back(user, path:)
|
67
|
+
if Devise.masquerade_routes_back
|
68
|
+
redirect_back(fallback_location: path)
|
69
|
+
else
|
70
|
+
redirect_to path
|
71
|
+
end
|
80
72
|
end
|
81
73
|
|
82
74
|
private
|
83
75
|
|
84
76
|
def masqueraded_resource_class
|
85
|
-
|
77
|
+
@masqueraded_resource_class ||= begin
|
78
|
+
unless params[:masqueraded_resource_class].blank?
|
79
|
+
params[:masqueraded_resource_class].constantize
|
80
|
+
else
|
81
|
+
unless session[session_key_masqueraded_resource_class].blank?
|
82
|
+
session[session_key_masquerading_resource_class].constantize
|
83
|
+
else
|
84
|
+
Devise.masqueraded_resource_class || resource_class
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
86
88
|
end
|
87
89
|
|
88
90
|
def masqueraded_resource_name
|
@@ -90,7 +92,17 @@ class Devise::MasqueradesController < DeviseController
|
|
90
92
|
end
|
91
93
|
|
92
94
|
def masquerading_resource_class
|
93
|
-
|
95
|
+
@masquerading_resource_class ||= begin
|
96
|
+
unless params[:masquerading_resource_class].blank?
|
97
|
+
params[:masquerading_resource_class].constantize
|
98
|
+
else
|
99
|
+
unless session[session_key_masquerading_resource_class].blank?
|
100
|
+
session[session_key_masquerading_resource_class].constantize
|
101
|
+
else
|
102
|
+
Devise.masquerading_resource_class || resource_class
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
94
106
|
end
|
95
107
|
|
96
108
|
def masquerading_resource_name
|
@@ -98,23 +110,15 @@ class Devise::MasqueradesController < DeviseController
|
|
98
110
|
end
|
99
111
|
|
100
112
|
def authenticate_scope!
|
101
|
-
send(:"authenticate_#{masquerading_resource_name}!", :
|
113
|
+
send(:"authenticate_#{masquerading_resource_name}!", force: true)
|
102
114
|
end
|
103
115
|
|
104
116
|
def after_masquerade_path_for(resource)
|
105
|
-
|
117
|
+
'/'
|
106
118
|
end
|
107
119
|
|
108
120
|
def after_masquerade_full_path_for(resource)
|
109
|
-
|
110
|
-
"#{after_masquerade_path_for(resource)}&#{after_masquerade_param_for(resource)}"
|
111
|
-
else
|
112
|
-
"#{after_masquerade_path_for(resource)}?#{after_masquerade_param_for(resource)}"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def after_masquerade_param_for(resource)
|
117
|
-
"#{Devise.masquerade_param}=#{resource.masquerade_key}"
|
121
|
+
after_masquerade_path_for(resource)
|
118
122
|
end
|
119
123
|
|
120
124
|
def after_back_masquerade_path_for(resource)
|
@@ -124,14 +128,26 @@ class Devise::MasqueradesController < DeviseController
|
|
124
128
|
def save_masquerade_owner_session
|
125
129
|
unless session.key?(session_key)
|
126
130
|
session[session_key] = send("current_#{masquerading_resource_name}").id
|
131
|
+
session[session_key_masquerading_resource_class] = masquerading_resource_class.name
|
132
|
+
session[session_key_masqueraded_resource_class] = masqueraded_resource_class.name
|
127
133
|
end
|
128
134
|
end
|
129
135
|
|
130
136
|
def cleanup_masquerade_owner_session
|
131
137
|
session.delete(session_key)
|
138
|
+
session.delete(session_key_masqueraded_resource_class)
|
139
|
+
session.delete(session_key_masquerading_resource_class)
|
132
140
|
end
|
133
141
|
|
134
142
|
def session_key
|
135
143
|
"devise_masquerade_#{masqueraded_resource_name}".to_sym
|
136
144
|
end
|
145
|
+
|
146
|
+
def session_key_masqueraded_resource_class
|
147
|
+
"devise_masquerade_masqueraded_resource_class"
|
148
|
+
end
|
149
|
+
|
150
|
+
def session_key_masquerading_resource_class
|
151
|
+
"devise_masquerade_masquerading_resource_class"
|
152
|
+
end
|
137
153
|
end
|
data/devise_masquerade.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.email = ['alex.korsak@gmail.com']
|
12
12
|
gem.description = 'devise masquerade library'
|
13
13
|
gem.summary = 'use for login as functionallity on your admin users pages'
|
14
|
-
gem.homepage = 'http://github.com/oivoodoo/devise_masquerade
|
14
|
+
gem.homepage = 'http://github.com/oivoodoo/devise_masquerade'
|
15
15
|
|
16
16
|
gem.files = `git ls-files`.split($/)
|
17
17
|
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
@@ -20,8 +20,8 @@ Gem::Specification.new do |gem|
|
|
20
20
|
|
21
21
|
gem.license = 'MIT'
|
22
22
|
|
23
|
-
gem.add_development_dependency('bundler', '>=
|
23
|
+
gem.add_development_dependency('bundler', '>= 2.0.0')
|
24
24
|
|
25
|
-
gem.add_runtime_dependency('railties', '>=
|
26
|
-
gem.add_runtime_dependency('devise', '>=
|
25
|
+
gem.add_runtime_dependency('railties', '>= 5.2.0')
|
26
|
+
gem.add_runtime_dependency('devise', '>= 4.7.0')
|
27
27
|
end
|
data/features/back.feature
CHANGED