4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/devise_masquerade/controllers/helpers.rb', line 4
def self.define_helpers(mapping)
name = mapping.name
class_name = mapping.class_name
class_eval <<-METHODS, __FILE__, __LINE__ + 1
def masquerade!
return if params["#{Devise.masquerade_param}"].blank?
klass = unless params[:masqueraded_resource_class].blank?
params[:masqueraded_resource_class].constantize
else
if Devise.masqueraded_resource_class
Devise.masqueraded_resource_class
elsif defined?(User)
User
end
end
return unless klass
resource = GlobalID::Locator.locate_signed params[Devise.masquerade_param], for: 'masquerade'
if resource
masquerade_sign_in(resource)
end
end
def masquerade_#{name}!
return if params["#{Devise.masquerade_param}"].blank?
resource = GlobalID::Locator.locate_signed params[Devise.masquerade_param], for: 'masquerade'
if resource
masquerade_sign_in(resource)
end
end
def #{name}_masquerade?
::Rails.cache.exist?(:"devise_masquerade_#{name}").present?
end
def #{name}_masquerade_owner
return nil unless send(:#{name}_masquerade?)
GlobalID::Locator.locate_signed(Rails.cache.read(:"devise_masquerade_#{name}"), for: 'masquerade')
end
private
def masquerade_sign_in(resource)
if Devise.masquerade_bypass_warden_callback
if respond_to?(:bypass_sign_in)
bypass_sign_in(resource)
else
sign_in(resource, bypass: true)
end
else
sign_in(resource)
end
end
METHODS
ActiveSupport.on_load(:action_controller) do
if respond_to?(:helper_method)
helper_method "#{name}_masquerade?"
helper_method "#{name}_masquerade_owner"
end
end
end
|