switch_user 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +23 -2
- data/app/controllers/switch_user_controller.rb +13 -4
- data/app/helpers/switch_user_helper.rb +13 -5
- data/lib/switch_user/version.rb +1 -1
- data/lib/switch_user.rb +15 -2
- metadata +4 -4
data/README.md
CHANGED
@@ -7,20 +7,41 @@ switch_user promises that it only be activated in the development environment.
|
|
7
7
|
|
8
8
|
It supports only devise now, but it will support authlogic in the future.
|
9
9
|
|
10
|
+
Example
|
11
|
+
-------
|
12
|
+
|
13
|
+
Visit here: [http://switch-user-example.heroku.com/][0], switch the current user in the select box.
|
14
|
+
|
10
15
|
Install
|
11
16
|
-------
|
12
17
|
|
13
|
-
|
18
|
+
Add in Gemfile.
|
14
19
|
|
15
20
|
gem "switch_user", "~> 0.1.0"
|
16
21
|
|
17
22
|
Usage
|
18
23
|
-----
|
19
24
|
|
20
|
-
|
25
|
+
Add following code into your layout page.
|
21
26
|
|
22
27
|
= switch_user_select
|
23
28
|
|
29
|
+
Configuration
|
30
|
+
-------------
|
31
|
+
|
32
|
+
By default, you can switch between Guest and all users in users table.
|
33
|
+
|
34
|
+
But if you want to use different scope users in devise or you want to customize the users that can be switched, you should do like this
|
35
|
+
|
36
|
+
SwitchUser.setup do |config|
|
37
|
+
# model may be :devise or :authologic, but now we only support devise
|
38
|
+
config.mode = :devise
|
39
|
+
# avaliable_users is a hash, key is the scope of devise user, value is the proc that return the users that can be switched.
|
40
|
+
config.available_users = { :user => lambda { User.all }, :admin => lambda { Admin.all } }
|
41
|
+
end
|
42
|
+
|
24
43
|
|
25
44
|
Copyright © 2010 Richard Huang (flyerhzm@gmail.com), released under the MIT license
|
26
45
|
|
46
|
+
[0]: http://switch-user-example.heroku.com/
|
47
|
+
|
@@ -3,11 +3,20 @@ class SwitchUserController < ApplicationController
|
|
3
3
|
before_filter :developer_modes_only
|
4
4
|
|
5
5
|
def set_current_user
|
6
|
-
if params[:
|
7
|
-
|
6
|
+
if params[:scope_id].blank?
|
7
|
+
SwitchUser.available_users.keys.each do |s|
|
8
|
+
warden.logout(s)
|
9
|
+
end
|
8
10
|
else
|
9
|
-
|
10
|
-
|
11
|
+
scope, id = params[:scope_id].split('_')
|
12
|
+
SwitchUser.available_users.keys.each do |s|
|
13
|
+
if scope == s.to_s
|
14
|
+
user = scope.classify.constantize.find(id)
|
15
|
+
warden.set_user(user, :scope => scope)
|
16
|
+
else
|
17
|
+
warden.logout(s)
|
18
|
+
end
|
19
|
+
end
|
11
20
|
end
|
12
21
|
redirect_to(request.env["HTTP_REFERER"] ? :back : root_path)
|
13
22
|
end
|
@@ -2,14 +2,22 @@ module SwitchUserHelper
|
|
2
2
|
def switch_user_select
|
3
3
|
if Rails.env == "development"
|
4
4
|
if current_user
|
5
|
-
options = "<option value=
|
6
|
-
options += options_from_collection_for_select(User.all, :id, :email, current_user.id)
|
5
|
+
options = "<option value=''>Guest</option>"
|
7
6
|
else
|
8
|
-
options = "<option selected='selected' value=
|
9
|
-
|
7
|
+
options = "<option selected='selected' value=''>Guest</option>"
|
8
|
+
end
|
9
|
+
SwitchUser.available_users.each do |scope, user_proc|
|
10
|
+
user_proc.call.each do |user|
|
11
|
+
current = send("current_#{scope}")
|
12
|
+
if current and current.id == user.id
|
13
|
+
options += "<option selected='selected' value='#{scope}_#{user.id}'>#{user.send(SwitchUser.display_field)}</option>"
|
14
|
+
else
|
15
|
+
options += "<option value='#{scope}_#{user.id}'>#{user.send(SwitchUser.display_field)}</option>"
|
16
|
+
end
|
17
|
+
end
|
10
18
|
end
|
11
19
|
select_tag "switch_user_id", options.html_safe,
|
12
|
-
:onchange => "location.href = '/switch_user?
|
20
|
+
:onchange => "location.href = '/switch_user?scope_id=' + encodeURIComponent(this.options[this.selectedIndex].value)"
|
13
21
|
end
|
14
22
|
end
|
15
23
|
end
|
data/lib/switch_user/version.rb
CHANGED
data/lib/switch_user.rb
CHANGED
@@ -3,7 +3,20 @@ require "rails"
|
|
3
3
|
module SwitchUser
|
4
4
|
class Engine < Rails::Engine
|
5
5
|
config.to_prepare do
|
6
|
-
|
6
|
+
ApplicationController.helper(SwitchUserHelper)
|
7
7
|
end
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
|
+
mattr_accessor :mode
|
11
|
+
self.mode = 'devise'
|
12
|
+
|
13
|
+
mattr_accessor :available_users
|
14
|
+
self.available_users = { :user => lambda { User.all } }
|
15
|
+
|
16
|
+
mattr_accessor :display_field
|
17
|
+
self.display_field = 'email'
|
18
|
+
|
19
|
+
def self.setup
|
20
|
+
yield self
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: switch_user
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Richard Huang
|