devise_masquerade 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 417fd89c5319cada031d19c75351278a793d891f
4
- data.tar.gz: 2beabc09bbe11a916c7cac22e58577c132feb7be
3
+ metadata.gz: '08ff9d50cb4dd74d3f209afa2f34a0905058ba5e'
4
+ data.tar.gz: ce4059a49c9877569b475ea5577627071d1ffb01
5
5
  SHA512:
6
- metadata.gz: b9aca21064db3b097059eb20a91bb42c2699458eee8f21e88d2ad7db56be5d97dae9a743cfece7fb91f93d829aa2bfac02d881064f53ccd5664e31fea19e1b11
7
- data.tar.gz: e010d497e12e9bc3b3c7d875e01c99209f329fbe48fcf3d04dd29b03641b81c17526af8e9d9ec9e8ee8ecfc0d6509652c4a16ec1c319a71e0dd67d333e6547ab
6
+ metadata.gz: 72638104b38f4f2ca1d594e4aa26534cc236a445c1d3468c832bf1d98c329665013db732f760e1622f59cf43c4e5edf344acabfe7eb3295d8d1d95231a1634da
7
+ data.tar.gz: f15e6b83c28d33bbb3eea1f6166e81695c1d323afcdc22ba6c94ca067b65f298f6395a7cd5c867bd0a2026708d265ddd096d0c618af9b3fb5b91be9e49e2aa75
data/README.md CHANGED
@@ -53,28 +53,31 @@ helpers:
53
53
 
54
54
  class Admin::MasqueradesController < Devise::MasqueradesController
55
55
  def show
56
- authorize!(:masquerade, User)
57
-
58
56
  super
59
57
  end
60
- end
61
58
 
62
- ## Custom url redirect after masquerade:
59
+ protected
63
60
 
64
- class Admin::MasqueradesController < Devise::MasqueradesController
65
- def show
61
+ def masquerade_authorize!
66
62
  authorize!(:masquerade, User)
67
-
68
- super
69
63
  end
70
64
 
65
+ # or you can define:
66
+ # def masquerade_authorized?
67
+ # <has access to something?> (true/false)
68
+ # end
69
+ end
70
+
71
+ ## Custom url redirect after masquerade:
72
+
73
+ class Admin::MasqueradesController < Devise::MasqueradesController
71
74
  protected
72
75
 
73
76
  def after_masquerade_path_for(resource)
74
77
  "/custom_url"
75
78
  end
76
79
  end
77
-
80
+
78
81
  #### Dont forget to update your Devise routes to point at your Custom Authorization Controller
79
82
  in `routes.rb`:
80
83
 
@@ -1,8 +1,8 @@
1
1
  class Devise::MasqueradesController < DeviseController
2
2
  if respond_to?(:prepend_before_action)
3
- prepend_before_action :authenticate_scope!
3
+ prepend_before_action :authenticate_scope!, :masquerade_authorize!
4
4
  else
5
- prepend_before_filter :authenticate_scope!
5
+ prepend_before_filter :authenticate_scope!, :masquerade_authorize!
6
6
  end
7
7
 
8
8
  if respond_to?(:before_action)
@@ -74,6 +74,16 @@ class Devise::MasqueradesController < DeviseController
74
74
  end
75
75
  end
76
76
 
77
+ protected
78
+
79
+ def masquerade_authorize!
80
+ head(403) unless masquerade_authorized?
81
+ end
82
+
83
+ def masquerade_authorized?
84
+ true
85
+ end
86
+
77
87
  private
78
88
 
79
89
  def authenticate_scope!
@@ -104,4 +114,3 @@ class Devise::MasqueradesController < DeviseController
104
114
  "devise_masquerade_#{resource_name}".to_sym
105
115
  end
106
116
  end
107
-
@@ -1,6 +1,7 @@
1
1
  require 'cucumber/rails'
2
2
  require 'factory_girl'
3
3
  require 'database_cleaner'
4
+ require 'cucumber/rspec/doubles'
4
5
 
5
6
  Dir[File.join(File.dirname(__FILE__), '..', '..', "spec/support/*.rb")].each {|f| require f}
6
7
 
@@ -21,3 +22,7 @@ end
21
22
  Cucumber::Rails::Database.javascript_strategy = :truncation
22
23
  Capybara.javascript_driver = :webkit
23
24
 
25
+ Before do
26
+ allow_any_instance_of(DeviseController).to receive(:devise_mapping) { Devise.mappings[:user] }
27
+ end
28
+
@@ -1,3 +1,3 @@
1
1
  module DeviseMasquerade
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe MasqueradesController, type: :controller do
4
+ before { @request.env['devise.mapping'] = Devise.mappings[:user] }
5
+
6
+ context 'no access for masquerade' do
7
+ before do
8
+ session.clear
9
+ allow_any_instance_of(MasqueradesController).to receive(:masquerade_authorized?) { false }
10
+ end
11
+
12
+ before { logged_in }
13
+
14
+ let(:mask) { create(:user) }
15
+
16
+ before { get :show, :id => mask.to_param }
17
+
18
+ it { expect(response.status).to eq(403) }
19
+ it { expect(session.keys).not_to include('devise_masquerade_user') }
20
+ it { expect(session["warden.user.user.key"].first.first).not_to eq(mask.id) }
21
+ end
22
+
23
+ context 'access for masquerade' do
24
+ before do
25
+ session.clear
26
+ allow_any_instance_of(MasqueradesController).to receive(:masquerade_authorized?) { true }
27
+ end
28
+
29
+ before { logged_in }
30
+
31
+ let(:mask) { create(:user) }
32
+
33
+ before do
34
+ expect(SecureRandom).to receive(:urlsafe_base64) { "secure_key" }
35
+ get :show, :id => mask.to_param
36
+ end
37
+
38
+ it { expect(response.status).to eq(302) }
39
+ it { expect(session.keys).to include('devise_masquerade_user') }
40
+ it { expect(session["warden.user.user.key"].first.first).to eq(mask.id) }
41
+ end
42
+ end
@@ -0,0 +1,5 @@
1
+ class MasqueradesController < Devise::MasqueradesController
2
+ def show
3
+ super
4
+ end
5
+ end
@@ -1,8 +1,6 @@
1
1
  class Users::MasqueradesController < Devise::MasqueradesController
2
2
  # Just an example showing how you would add authorization to devise_masquerade
3
- def show
4
- # do authorization stuff here
5
-
3
+ def show
6
4
  super
7
5
  end
8
6
 
@@ -12,4 +10,4 @@ class Users::MasqueradesController < Devise::MasqueradesController
12
10
  def after_masquerade_path_for(resource)
13
11
  "/"
14
12
  end
15
- end
13
+ end
@@ -4,8 +4,9 @@ Dummy::Application.routes.draw do
4
4
 
5
5
  root :to => 'dashboard#index'
6
6
 
7
+ resources :masquerades
8
+
7
9
  namespace :admin do
8
10
  root :to => 'dashboard#index'
9
11
  end
10
12
  end
11
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_masquerade
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandr Korsak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-14 00:00:00.000000000 Z
11
+ date: 2017-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -87,10 +87,12 @@ files:
87
87
  - spec/controllers/admin/dashboard_controller_spec.rb
88
88
  - spec/controllers/dashboard_controller_spec.rb
89
89
  - spec/controllers/devise/masquerades_controller_spec.rb
90
+ - spec/controllers/masquerades_controller_spec.rb
90
91
  - spec/dummy/Rakefile
91
92
  - spec/dummy/app/controllers/admin/dashboard_controller.rb
92
93
  - spec/dummy/app/controllers/application_controller.rb
93
94
  - spec/dummy/app/controllers/dashboard_controller.rb
95
+ - spec/dummy/app/controllers/masquerades_controller.rb
94
96
  - spec/dummy/app/controllers/users/masquerades_controller.rb
95
97
  - spec/dummy/app/helpers/application_helper.rb
96
98
  - spec/dummy/app/models/admin.rb
@@ -160,10 +162,12 @@ test_files:
160
162
  - spec/controllers/admin/dashboard_controller_spec.rb
161
163
  - spec/controllers/dashboard_controller_spec.rb
162
164
  - spec/controllers/devise/masquerades_controller_spec.rb
165
+ - spec/controllers/masquerades_controller_spec.rb
163
166
  - spec/dummy/Rakefile
164
167
  - spec/dummy/app/controllers/admin/dashboard_controller.rb
165
168
  - spec/dummy/app/controllers/application_controller.rb
166
169
  - spec/dummy/app/controllers/dashboard_controller.rb
170
+ - spec/dummy/app/controllers/masquerades_controller.rb
167
171
  - spec/dummy/app/controllers/users/masquerades_controller.rb
168
172
  - spec/dummy/app/helpers/application_helper.rb
169
173
  - spec/dummy/app/models/admin.rb