/
switch_user_controller.rb
61 lines (49 loc) · 1.43 KB
/
switch_user_controller.rb
1
2
3
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
class SwitchUserController < ApplicationController
unless Rails.version =~ /^3/
unloadable
end
before_filter :developer_modes_only
def set_current_user
handle_request(params)
redirect_to(SwitchUser.redirect_path.call(request, params))
end
private
def developer_modes_only
render :text => "Permission Denied", :status => 403 unless available?
end
def available?
SwitchUser.controller_guard.call(provider.current_user, request)
end
def handle_request(params)
if params[:scope_identifier].blank?
SwitchUser.available_users.keys.each do |s|
provider.logout(s)
end
else
params[:scope_identifier] =~ /^([^_]+)_(.*)$/
scope, identifier = $1, $2
SwitchUser.available_users.keys.each do |s|
if scope == s.to_s
user = find_user(scope, s, identifier)
provider.login(user, scope)
else
provider.logout(s)
end
end
end
end
def find_user(scope, identifier_scope, identifier)
identifier_column = SwitchUser.available_users_identifiers[identifier_scope] || :id
if identifier_column == :id
scope.classify.constantize.find(identifier)
else
scope.classify.constantize.send("find_by_#{identifier_column}!", identifier)
end
end
def provider
provider_class.new(self)
end
def provider_class
"SwitchUser::Provider::#{SwitchUser.provider.to_s.classify}".constantize
end
end