authorization-san 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/authorization/allow_access.rb +5 -1
- metadata +7 -58
- data/examples/administrations_controller.rb +0 -11
- data/examples/application.rb +0 -22
- data/examples/application_with_multiple_auth_methods.rb +0 -33
- data/examples/authenticated_controller.rb +0 -6
- data/examples/page_controller_with_full_policy.rb +0 -28
- data/examples/pages_controller.rb +0 -25
- data/examples/public_controller.rb +0 -6
- data/examples/users_controller.rb +0 -27
- data/test/cases/behaviour_test.rb +0 -183
- data/test/cases/deprecated_test.rb +0 -127
- data/test/cases/internals_test.rb +0 -223
- data/test/cases/structural_test.rb +0 -21
- data/test/controllers/all.rb +0 -7
- data/test/controllers/application_controller.rb +0 -16
- data/test/controllers/authenticated_controller.rb +0 -7
- data/test/controllers/broken_block_controller.rb +0 -10
- data/test/controllers/complicated_controller.rb +0 -8
- data/test/controllers/multiple_roles_controller.rb +0 -10
- data/test/controllers/public_controller.rb +0 -7
- data/test/controllers/users_controller.rb +0 -13
- data/test/helpers/methods.rb +0 -52
- data/test/models/resource.rb +0 -37
- data/test/test_helper/rails2/test_helper.rb +0 -29
- data/test/test_helper/rails3/test_helper.rb +0 -29
- data/test/test_helper/shared.rb +0 -17
@@ -48,7 +48,11 @@ module Authorization
|
|
48
48
|
# end
|
49
49
|
def allow_access(*args, &block)
|
50
50
|
unless self.respond_to?(:access_allowed_for)
|
51
|
-
|
51
|
+
if respond_to?(:class_attribute)
|
52
|
+
class_attribute :access_allowed_for
|
53
|
+
else
|
54
|
+
class_inheritable_accessor(:access_allowed_for)
|
55
|
+
end
|
52
56
|
self.access_allowed_for = {}.with_indifferent_access
|
53
57
|
send(:protected, :access_allowed_for, :access_allowed_for=)
|
54
58
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authorization-san
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 2.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Manfred Stienstra
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-11-17 00:00:00 Z
|
20
19
|
dependencies: []
|
21
20
|
|
22
21
|
description: A plugin for authorization in a ReSTful application.
|
@@ -36,32 +35,6 @@ files:
|
|
36
35
|
- lib/authorization/block_access.rb
|
37
36
|
- lib/authorization/deprecated.rb
|
38
37
|
- rails/init.rb
|
39
|
-
- examples/administrations_controller.rb
|
40
|
-
- examples/application.rb
|
41
|
-
- examples/application_with_multiple_auth_methods.rb
|
42
|
-
- examples/authenticated_controller.rb
|
43
|
-
- examples/page_controller_with_full_policy.rb
|
44
|
-
- examples/pages_controller.rb
|
45
|
-
- examples/public_controller.rb
|
46
|
-
- examples/users_controller.rb
|
47
|
-
- test/cases/behaviour_test.rb
|
48
|
-
- test/cases/deprecated_test.rb
|
49
|
-
- test/cases/internals_test.rb
|
50
|
-
- test/cases/structural_test.rb
|
51
|
-
- test/controllers/all.rb
|
52
|
-
- test/controllers/application_controller.rb
|
53
|
-
- test/controllers/authenticated_controller.rb
|
54
|
-
- test/controllers/broken_block_controller.rb
|
55
|
-
- test/controllers/complicated_controller.rb
|
56
|
-
- test/controllers/multiple_roles_controller.rb
|
57
|
-
- test/controllers/public_controller.rb
|
58
|
-
- test/controllers/users_controller.rb
|
59
|
-
- test/helpers/methods.rb
|
60
|
-
- test/models/resource.rb
|
61
|
-
- test/test_helper/rails2/test_helper.rb
|
62
|
-
- test/test_helper/rails3/test_helper.rb
|
63
|
-
- test/test_helper/shared.rb
|
64
|
-
has_rdoc: true
|
65
38
|
homepage: http://fingertips.github.com
|
66
39
|
licenses: []
|
67
40
|
|
@@ -91,33 +64,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
64
|
requirements: []
|
92
65
|
|
93
66
|
rubyforge_project:
|
94
|
-
rubygems_version: 1.
|
67
|
+
rubygems_version: 1.8.11
|
95
68
|
signing_key:
|
96
69
|
specification_version: 3
|
97
70
|
summary: A plugin for authorization in a ReSTful application.
|
98
|
-
test_files:
|
99
|
-
|
100
|
-
- examples/application.rb
|
101
|
-
- examples/application_with_multiple_auth_methods.rb
|
102
|
-
- examples/authenticated_controller.rb
|
103
|
-
- examples/page_controller_with_full_policy.rb
|
104
|
-
- examples/pages_controller.rb
|
105
|
-
- examples/public_controller.rb
|
106
|
-
- examples/users_controller.rb
|
107
|
-
- test/cases/behaviour_test.rb
|
108
|
-
- test/cases/deprecated_test.rb
|
109
|
-
- test/cases/internals_test.rb
|
110
|
-
- test/cases/structural_test.rb
|
111
|
-
- test/controllers/all.rb
|
112
|
-
- test/controllers/application_controller.rb
|
113
|
-
- test/controllers/authenticated_controller.rb
|
114
|
-
- test/controllers/broken_block_controller.rb
|
115
|
-
- test/controllers/complicated_controller.rb
|
116
|
-
- test/controllers/multiple_roles_controller.rb
|
117
|
-
- test/controllers/public_controller.rb
|
118
|
-
- test/controllers/users_controller.rb
|
119
|
-
- test/helpers/methods.rb
|
120
|
-
- test/models/resource.rb
|
121
|
-
- test/test_helper/rails2/test_helper.rb
|
122
|
-
- test/test_helper/rails3/test_helper.rb
|
123
|
-
- test/test_helper/shared.rb
|
71
|
+
test_files: []
|
72
|
+
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# The administrations controller is nested under organizations (ie. /organizations/3214/administrations)
|
2
|
-
class PagesController < ApplicationController
|
3
|
-
# The following rule only allows @authenticated if @authenticated.organization.id == params[:organization_id].
|
4
|
-
# Roughly translated this means that the authenticated user can only access resources belonging to its own
|
5
|
-
# organization.
|
6
|
-
allow_access :authenticated, :scope => :organization
|
7
|
-
|
8
|
-
def index
|
9
|
-
@administrations = @authenticated.organization.administrations
|
10
|
-
end
|
11
|
-
end
|
data/examples/application.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
class ApplicationController < ActionController::Base
|
2
|
-
# You have to specify where you want these actions to appear in your filter chain. Make sure you :block_access
|
3
|
-
# before any sensitive processing occurs.
|
4
|
-
before_filter :find_authenticated, :block_access
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
# Find the authenticated user
|
9
|
-
def find_authenticated
|
10
|
-
@authenticated = authenticate_with_http_basic { |username, password| User.authenticate(username, password) }
|
11
|
-
end
|
12
|
-
|
13
|
-
# Access was forbidden to client requesting the resource. React to that appropriately. Note that this reply is very
|
14
|
-
# bare bones and you might want to return more elaborate responses in a real application.
|
15
|
-
def access_forbidden
|
16
|
-
if @authenticated.nil?
|
17
|
-
request_http_basic_authentication "Accounting"
|
18
|
-
else
|
19
|
-
head :forbidden
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
class ApplicationController < ActionController::Base
|
2
|
-
before_filter :find_authenticated, :block_access
|
3
|
-
|
4
|
-
private
|
5
|
-
|
6
|
-
# Find the authenticated user, cookie based authentication for browser users and HTTP Basic Authentication for
|
7
|
-
# API users. Note that this does not allow you to get HTML resources when logged in through Basic Auth.
|
8
|
-
def find_authenticated
|
9
|
-
respond_to do |format|
|
10
|
-
format.html do
|
11
|
-
@authenticated = Person.find_by_id session[:authenticated_id] unless session[:authenticated_id].nil?
|
12
|
-
end
|
13
|
-
format.xml do
|
14
|
-
@authenticated = authenticate_with_http_basic { |username, password| User.authenticate(username, password) }
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# Access was forbidden to client requesting the resource. React to that appropriately. Note that this reply is very
|
20
|
-
# bare bones and you might want to return more elaborate responses in a real application.
|
21
|
-
def access_forbidden
|
22
|
-
unless @authenticated
|
23
|
-
# The user is not authenticated; ask for credentials
|
24
|
-
respond_to do |format|
|
25
|
-
format.html { redirect_to login_url }
|
26
|
-
format.xml { request_http_basic_authentication "Accounting" }
|
27
|
-
end
|
28
|
-
else
|
29
|
-
# The user is authentication but unauthorized for this resource
|
30
|
-
head :forbidden
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# The pages controller is a nest resource under users (ie. /users/12/pages)
|
2
|
-
class PagesController < ApplicationController
|
3
|
-
# A user may only access her own index
|
4
|
-
allow_access(:authenticated, :only => :index) { @authenticated == @user }
|
5
|
-
# A user may only access her own pages
|
6
|
-
allow_access(:authenticated, :only => :show) { @authenticated == @page.user}
|
7
|
-
|
8
|
-
# Always find the user the pages are nested under before applying the rules
|
9
|
-
prepend_before_filter :find_user
|
10
|
-
# Find the page before applying the rules when the show action is called
|
11
|
-
prepend_before_filter :find_page, :only => :show
|
12
|
-
|
13
|
-
def index
|
14
|
-
@pages = @user.pages
|
15
|
-
end
|
16
|
-
|
17
|
-
def show; end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def find_user
|
22
|
-
@user = User.find params[:user_id]
|
23
|
-
end
|
24
|
-
|
25
|
-
def find_page
|
26
|
-
@page = Page.find params[:id]
|
27
|
-
end
|
28
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# The pages controller is nested under users (ie. /users/12/pages)
|
2
|
-
class PagesController < ApplicationController
|
3
|
-
# Users can only reach pages nested under their user_id. Note that this doesn't define the complete access policy,
|
4
|
-
# some of the authorization is still done in the actions. See pages_controller_with_full_policy.rb for an example
|
5
|
-
# of specifying everything in access rules.
|
6
|
-
allow_access(:authenticated) { @authenticated.to_param == params[:user_id].to_param }
|
7
|
-
|
8
|
-
before_filter :find_user
|
9
|
-
|
10
|
-
def index
|
11
|
-
@pages = @user.pages
|
12
|
-
end
|
13
|
-
|
14
|
-
def show
|
15
|
-
@page = @user.pages.find params[:id]
|
16
|
-
rescue ActiveRecord::RecordNotFound
|
17
|
-
head :forbidden
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def find_user
|
23
|
-
@user = User.find params[:user_id]
|
24
|
-
end
|
25
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
class UsersController < ApplicationController
|
2
|
-
# The default is to deny all access. Every rule creates a 'hole' in this policy. You can specify multiple rules
|
3
|
-
# per role if you want.
|
4
|
-
|
5
|
-
# The 'admin' role (@authenticated.role) has access to all the actions.
|
6
|
-
allow_access :admin
|
7
|
-
# The 'editor' role has access to the index and show action.
|
8
|
-
allow_access :editor, :only => [:index, :show]
|
9
|
-
# The 'user' role has access to the index, show, edit and update role only if the resource he's editing is the same
|
10
|
-
# as the user resource.
|
11
|
-
allow_access :user, :only => [:index, :show, :edit, :update], :user_resource => true
|
12
|
-
# The 'guest' role has access to the index and show action if the Proc returns true.
|
13
|
-
allow_access(:guest, :only => [:index, :show]) { @authenticated.valid_email? }
|
14
|
-
# Everyone can access the listing and the index action, the other actions can be accessed when it's not sunday.
|
15
|
-
allow_access :only => :listing
|
16
|
-
allow_access :only => :index
|
17
|
-
allow_access() { Time.now.strftime('%A') != 'Sunday' }
|
18
|
-
|
19
|
-
def index; end
|
20
|
-
def listing; end
|
21
|
-
def new; end
|
22
|
-
def create; end
|
23
|
-
def show; end
|
24
|
-
def edit; end
|
25
|
-
def update; end
|
26
|
-
def destroy; end
|
27
|
-
end
|
@@ -1,183 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
require 'controllers/all'
|
4
|
-
require 'models/resource'
|
5
|
-
|
6
|
-
class BehaviourTest < ActionController::TestCase
|
7
|
-
test "access is denied for nonexistant actions without an access rule" do
|
8
|
-
begin
|
9
|
-
tests UsersController, :authenticated => Resource.new(:role => :tester, :id => 1)
|
10
|
-
get :unknown, :id => 1
|
11
|
-
assert_response :forbidden
|
12
|
-
rescue AbstractController::ActionNotFound # Rails 3 behaves diffently to missing methods
|
13
|
-
assert true
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
test "roles are properly checked" do
|
18
|
-
tests UsersController, :authenticated => Resource.new
|
19
|
-
{
|
20
|
-
[:admin, :index] => :ok,
|
21
|
-
[:admin, :show] => :ok,
|
22
|
-
[:admin, :guest] => :ok,
|
23
|
-
[:admin, :listing] => :ok,
|
24
|
-
[:admin, :react] => :ok,
|
25
|
-
[:editor, :index] => :ok,
|
26
|
-
[:editor, :guest] => :forbidden,
|
27
|
-
[:editor, :listing] => :ok,
|
28
|
-
[:editor, :react] => :ok,
|
29
|
-
[:guest, :index] => :forbidden,
|
30
|
-
[:guest, :guest] => :ok,
|
31
|
-
[:guest, :listing] => :ok,
|
32
|
-
[:guest, :react] => :ok,
|
33
|
-
[:user, :listing] => :ok,
|
34
|
-
[:user, :react] => :ok,
|
35
|
-
[:user, :index] => :forbidden,
|
36
|
-
}.each do |(role, action), status|
|
37
|
-
@controller.authenticated.role = role
|
38
|
-
get action
|
39
|
-
assert_response status
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
test "authenticated is allowed to access its own resource" do
|
44
|
-
tests UsersController, :authenticated => Resource.new(:role => :tester, :id => 1)
|
45
|
-
get :show, :id => 1
|
46
|
-
assert_response :ok
|
47
|
-
end
|
48
|
-
|
49
|
-
test "authenticated is not allowed to access other users" do
|
50
|
-
tests UsersController, :authenticated => Resource.new(:role => :tester, :id => 1)
|
51
|
-
get :show, :id => 2
|
52
|
-
assert_response :forbidden
|
53
|
-
end
|
54
|
-
|
55
|
-
test "authenticated is allowed to access within the defined scope" do
|
56
|
-
tests UsersController, :authenticated => Resource.new(:role => :reader, :organization => Resource.new(:id => 1))
|
57
|
-
get :show, :organization_id => 1
|
58
|
-
assert_response :success
|
59
|
-
end
|
60
|
-
|
61
|
-
test "authenticated is not allowed to access outside of the defined scope" do
|
62
|
-
tests UsersController, :authenticated => Resource.new(:role => :tester, :id => 1)
|
63
|
-
get :show, :organization_id => 2
|
64
|
-
assert_response :forbidden
|
65
|
-
end
|
66
|
-
test "rule without restrictions opens up the whole controller" do
|
67
|
-
tests PublicController
|
68
|
-
get :index
|
69
|
-
assert_response :ok
|
70
|
-
end
|
71
|
-
|
72
|
-
test "rule with special role :authenticated allows when @authenticated is truthy" do
|
73
|
-
tests AuthenticatedController, :authenticated => true
|
74
|
-
get :index
|
75
|
-
assert_response :ok
|
76
|
-
end
|
77
|
-
|
78
|
-
test "rule with special role :authenticated disallows when @authenticated is not truthy" do
|
79
|
-
tests AuthenticatedController, :authenticated => false
|
80
|
-
get :index
|
81
|
-
assert_response :forbidden
|
82
|
-
end
|
83
|
-
|
84
|
-
test "rule with broken block should raise an exception when evaluated" do
|
85
|
-
tests BrokenBlockController
|
86
|
-
assert_raises(NoMethodError) do
|
87
|
-
get :index
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
test "rule with block should only be evaluated when the action matches" do
|
92
|
-
tests BrokenBlockController
|
93
|
-
assert_nothing_raised do
|
94
|
-
get :show
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
test "rule with block should only be evaluated when the role matches" do
|
99
|
-
tests BrokenBlockController, :authenticated => Resource.new(:role => :admin)
|
100
|
-
assert_nothing_raised do
|
101
|
-
get :show
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
test "rule with block should only be evaluated when the special role matches" do
|
106
|
-
tests BrokenBlockController, :authenticated => true
|
107
|
-
assert_nothing_raised do
|
108
|
-
get :show
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
test "rule with multiple roles" do
|
113
|
-
tests MultipleRolesController, :authenticated => Resource.new
|
114
|
-
{
|
115
|
-
[:a, :index] => :ok,
|
116
|
-
[:b, :index] => :ok,
|
117
|
-
[:c, :index] => :ok,
|
118
|
-
[:d, :index] => :ok,
|
119
|
-
[:e, :index] => :ok,
|
120
|
-
[:f, :index] => :ok,
|
121
|
-
[:e, :show] => :forbidden,
|
122
|
-
[:f, :show] => :forbidden,
|
123
|
-
[:g, :index] => :forbidden,
|
124
|
-
[:h, :index] => :forbidden,
|
125
|
-
[:g, :show] => :ok,
|
126
|
-
[:h, :show] => :ok,
|
127
|
-
}.each do |(role, action), status|
|
128
|
-
@controller.authenticated.role = role
|
129
|
-
get action
|
130
|
-
assert_response status
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
test "rule with special role, user resource and action restriction, should disallow unauthenticated" do
|
135
|
-
tests ComplicatedController
|
136
|
-
get :show, :id => 1
|
137
|
-
assert_response :forbidden
|
138
|
-
end
|
139
|
-
|
140
|
-
test "rule with special role, user resource and action restriction, should disallow incorrect user" do
|
141
|
-
tests ComplicatedController, :authenticated => Resource.new(:id => 2)
|
142
|
-
get :show, :id => 1
|
143
|
-
assert_response :forbidden
|
144
|
-
end
|
145
|
-
|
146
|
-
test "rule with special role, user resource and action restriction, should allow correct user" do
|
147
|
-
tests ComplicatedController, :authenticated => Resource.new(:id => 1)
|
148
|
-
get :show, :id => 1
|
149
|
-
assert_response :ok
|
150
|
-
end
|
151
|
-
|
152
|
-
test "controller with rule about special role, user resource and action restriction, should allow open actions" do
|
153
|
-
tests ComplicatedController
|
154
|
-
get :index
|
155
|
-
assert_response :ok
|
156
|
-
end
|
157
|
-
|
158
|
-
class ActionController::Base
|
159
|
-
class << self
|
160
|
-
attr_accessor :_routes
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
private
|
165
|
-
|
166
|
-
def tests(controller, options={})
|
167
|
-
@request = ActionController::TestRequest.new
|
168
|
-
@response = ActionController::TestResponse.new
|
169
|
-
@controller ||= controller.new rescue nil
|
170
|
-
|
171
|
-
if defined?(ActionDispatch)
|
172
|
-
@routes = ActionDispatch::Routing::RouteSet.new
|
173
|
-
@routes.draw { match ':controller(/:action(/:id(.:format)))' }
|
174
|
-
@routes.finalize!
|
175
|
-
controller._routes = @routes
|
176
|
-
end
|
177
|
-
|
178
|
-
@controller.request = @request
|
179
|
-
@controller.params = {}
|
180
|
-
|
181
|
-
@controller.authenticated = options[:authenticated]
|
182
|
-
end
|
183
|
-
end
|
@@ -1,127 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
require 'models/resource'
|
4
|
-
require 'helpers/methods'
|
5
|
-
|
6
|
-
class DeprecatedTest < ActiveSupport::TestCase
|
7
|
-
include Authorization::BlockAccess
|
8
|
-
include MethodsHelpers
|
9
|
-
|
10
|
-
test "action_allowed? sanity" do
|
11
|
-
@access_allowed_for = {
|
12
|
-
:admin => [{
|
13
|
-
:directives => {}
|
14
|
-
}],
|
15
|
-
:editor => [{
|
16
|
-
:directives => {:only => :index}
|
17
|
-
}],
|
18
|
-
:complex => [
|
19
|
-
{:directives => {:only => :index}},
|
20
|
-
{:directives => {:only => :show}}
|
21
|
-
],
|
22
|
-
:all => [{
|
23
|
-
:directives => {:only => :listing}
|
24
|
-
}]
|
25
|
-
}
|
26
|
-
assert_action_allowed({
|
27
|
-
[:admin, :index] => true,
|
28
|
-
[:admin, :show] => true,
|
29
|
-
[:admin, :unknown] => true,
|
30
|
-
[:editor, :unknown] => false,
|
31
|
-
[:editor, :index] => true,
|
32
|
-
[:all, :index] => false,
|
33
|
-
[:all, :unknown] => false,
|
34
|
-
[:all, :listing] => true,
|
35
|
-
[:complex, :index] => true,
|
36
|
-
[:complex, :show] => true,
|
37
|
-
[:complex, :unknown] => false
|
38
|
-
})
|
39
|
-
end
|
40
|
-
|
41
|
-
test "action_allowed? sanity with directives" do
|
42
|
-
@access_allowed_for = {:all => [{:directives => {}}] }
|
43
|
-
assert_action_allowed({
|
44
|
-
[:admin, :index] => false,
|
45
|
-
[:all, :show] => true,
|
46
|
-
[:unknown, :show] => false
|
47
|
-
})
|
48
|
-
end
|
49
|
-
|
50
|
-
test "action_allowed? sanity without directives" do
|
51
|
-
@access_allowed_for = {}
|
52
|
-
assert_action_allowed({
|
53
|
-
[:admin, :index] => false,
|
54
|
-
[:all, :show] => false,
|
55
|
-
[:show, :unknown] => false
|
56
|
-
})
|
57
|
-
end
|
58
|
-
|
59
|
-
test "action_allowed? breaks when no rules are defined" do
|
60
|
-
@access_allowed_for = nil
|
61
|
-
params = HashWithIndifferentAccess.new :action => :something
|
62
|
-
assert_raises(ArgumentError) { action_allowed?(params, :something) }
|
63
|
-
end
|
64
|
-
|
65
|
-
test "resource_allowed? sanity with :authenticated directive" do
|
66
|
-
@access_allowed_for = {
|
67
|
-
:all => [{
|
68
|
-
:directives => {:authenticated => true}
|
69
|
-
}]
|
70
|
-
}
|
71
|
-
assert !resource_allowed?({}, :admin, nil)
|
72
|
-
assert !resource_allowed?({}, :admin, true)
|
73
|
-
assert resource_allowed?({}, :all, true)
|
74
|
-
assert resource_allowed?({:action => :edit}, :all, true)
|
75
|
-
end
|
76
|
-
|
77
|
-
test "resource_allowed? sanity with :user_resource directive" do
|
78
|
-
@access_allowed_for = {
|
79
|
-
:user => [{
|
80
|
-
:directives => {:only => [:index, :show], :user_resource => true}
|
81
|
-
}]
|
82
|
-
}
|
83
|
-
assert_resource_allowed({
|
84
|
-
[{}, :admin, {}] => false,
|
85
|
-
[{:id => 1}, :admin, {:id => 1}] => false,
|
86
|
-
[{}, :admin, {:id => 1}] => false,
|
87
|
-
[{:id => 1}, :admin, {}] => false,
|
88
|
-
[{}, :user, {}] => false,
|
89
|
-
[{:id => 1}, :user, {:id => 1}] => true,
|
90
|
-
[{:id => 2}, :user, {:id => 1}] => false,
|
91
|
-
[{:id => 1}, :user, {:id => 2}] => false,
|
92
|
-
[{}, :user, {:id => 1}] => false,
|
93
|
-
[{:id => 1}, :user, {}] => false,
|
94
|
-
})
|
95
|
-
end
|
96
|
-
|
97
|
-
test "resource_allowed? sanity with :scope directive" do
|
98
|
-
@access_allowed_for = {
|
99
|
-
:user => [{
|
100
|
-
:directives => {:only => [:index, :show], :scope => :organization}
|
101
|
-
}]
|
102
|
-
}
|
103
|
-
assert_resource_allowed({
|
104
|
-
[{}, :admin, {}] => false,
|
105
|
-
[{:organization_id => 1}, :admin, {:organization => Resource.new({:id => 1})}] => false,
|
106
|
-
[{}, :admin, {:organization => Resource.new({:id => 1})}] => false,
|
107
|
-
[{:organization_id => 1}, :admin, {}] => false,
|
108
|
-
[{}, :user, {}] => false,
|
109
|
-
[{:organization_id => 1}, :user, {:organization => Resource.new({:id => 1})}] => true,
|
110
|
-
[{}, :user, {:organization => Resource.new({:id => 1})}] => false,
|
111
|
-
[{:organization_id => 1}, :user, {}] => false,
|
112
|
-
[{:organization_id => 2}, :user, {:organization => Resource.new({:id => 1})}] => false,
|
113
|
-
[{:organization_id => 1}, :user, {:organization => Resource.new({:id => 2})}] => false,
|
114
|
-
})
|
115
|
-
end
|
116
|
-
|
117
|
-
test "block_allowed? sanity" do
|
118
|
-
@access_allowed_for = {
|
119
|
-
:admin => [{:block => self.class.instance_method(:do_true)}],
|
120
|
-
:all => [{:block => self.class.instance_method(:do_false)}]
|
121
|
-
}
|
122
|
-
assert_block_allowed({
|
123
|
-
:admin => true,
|
124
|
-
:all => false
|
125
|
-
})
|
126
|
-
end
|
127
|
-
end
|
@@ -1,223 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
require 'models/resource'
|
4
|
-
require 'helpers/methods'
|
5
|
-
|
6
|
-
class BlockAccessTest < ActiveSupport::TestCase
|
7
|
-
include Authorization::BlockAccess
|
8
|
-
include MethodsHelpers
|
9
|
-
|
10
|
-
test "block_access sanity" do
|
11
|
-
@access_allowed_for = {
|
12
|
-
:admin => [{
|
13
|
-
:directives => {}
|
14
|
-
}],
|
15
|
-
:editor => [{
|
16
|
-
:directives => {:only => :index}
|
17
|
-
}],
|
18
|
-
:blocked_guest => [{
|
19
|
-
:directives => {:only => :index},
|
20
|
-
:block => self.class.instance_method(:do_false)
|
21
|
-
}],
|
22
|
-
:open_guest => [{
|
23
|
-
:directives => {:only => :index},
|
24
|
-
:block => self.class.instance_method(:do_true)
|
25
|
-
}],
|
26
|
-
:complex => [
|
27
|
-
{:directives => {:only => :index}},
|
28
|
-
{:directives => {:only => :show}}
|
29
|
-
],
|
30
|
-
:all => [{
|
31
|
-
:directives => {:only => :listing}
|
32
|
-
}]
|
33
|
-
}
|
34
|
-
assert_block_access({
|
35
|
-
[:admin, :index] => true,
|
36
|
-
[:admin, :show] => true,
|
37
|
-
[:admin, :unknown] => true,
|
38
|
-
[:editor, :unknown] => false,
|
39
|
-
[:editor, :index] => true,
|
40
|
-
[:blocked_guest, :index] => false,
|
41
|
-
[:blocked_guest, :unknown] => false,
|
42
|
-
[:open_guest, :index] => true,
|
43
|
-
[:open_guest, :unknown] => false,
|
44
|
-
[:all, :index] => false,
|
45
|
-
[:all, :unknown] => false,
|
46
|
-
[:all, :listing] => true,
|
47
|
-
[:complex, :index] => true,
|
48
|
-
[:complex, :show] => true,
|
49
|
-
[:complex, :unknown] => false
|
50
|
-
})
|
51
|
-
end
|
52
|
-
|
53
|
-
test "block_access breaks when no rules are defined" do
|
54
|
-
@access_allowed_for = nil
|
55
|
-
assert_raises(ArgumentError) { block_access }
|
56
|
-
end
|
57
|
-
|
58
|
-
test "access is denied when there are no rules" do
|
59
|
-
@access_allowed_for = {}
|
60
|
-
assert !block_access
|
61
|
-
end
|
62
|
-
|
63
|
-
test "access is granted when authenticated has role and accessor and a rule matches accessor" do
|
64
|
-
@authenticated = Resource.new(:role => 'user', :'special?' => true)
|
65
|
-
set_rules(:special => [{:directives => {}}])
|
66
|
-
set_params(:action => :new)
|
67
|
-
assert block_access
|
68
|
-
end
|
69
|
-
|
70
|
-
test "access is granted when authenticated has role and accessor and a rule matches role" do
|
71
|
-
@authenticated = Resource.new(:role => 'user', :'special?' => true)
|
72
|
-
set_rules(:user => [{:directives => {}}])
|
73
|
-
set_params(:action => :new)
|
74
|
-
assert block_access
|
75
|
-
end
|
76
|
-
|
77
|
-
test "access is denied when authenticated has role and accessor and NO rule matches" do
|
78
|
-
@authenticated = Resource.new(:role => 'user', :'special?' => true)
|
79
|
-
set_rules(:admin => [{:directives => {}}])
|
80
|
-
set_params(:action => :new)
|
81
|
-
assert !block_access
|
82
|
-
end
|
83
|
-
|
84
|
-
test "access is granted when authenticated has multiple accessors and a rule matches" do
|
85
|
-
@access_allowed_for = {:special => [{
|
86
|
-
:directives => {}
|
87
|
-
}]}
|
88
|
-
@authenticated = Resource.new(:'special?' => true, :'admin?' => true)
|
89
|
-
@params = { :action => :new }.with_indifferent_access
|
90
|
-
assert block_access
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
class AccessByRuleTest < ActiveSupport::TestCase
|
95
|
-
include Authorization::BlockAccess
|
96
|
-
include MethodsHelpers
|
97
|
-
|
98
|
-
test "matches action when there are no restrictions on action" do
|
99
|
-
assert _matches_action?({}, :new)
|
100
|
-
end
|
101
|
-
|
102
|
-
test "matches action when there are no restrictions on action and no action" do
|
103
|
-
assert _matches_action?({}, nil)
|
104
|
-
end
|
105
|
-
|
106
|
-
test "matches action when there are inclusive restrictions on action (array)" do
|
107
|
-
assert _matches_action?({:only => [:index, :new, :create]}, :index)
|
108
|
-
end
|
109
|
-
|
110
|
-
test "matches action when there are inclusive restrictions on action (symbol)" do
|
111
|
-
assert _matches_action?({:only => :index}, :index)
|
112
|
-
end
|
113
|
-
|
114
|
-
test "matches action when there are exclusive restrictions on action (array)" do
|
115
|
-
assert _matches_action?({:except => [:update, :create, :delete]}, :index)
|
116
|
-
end
|
117
|
-
|
118
|
-
test "matches action when there are exclusive restrictions on action (symbol)" do
|
119
|
-
assert _matches_action?({:except => :update}, :index)
|
120
|
-
end
|
121
|
-
|
122
|
-
test "does not match action when there are inclusive restrictions on action (array)" do
|
123
|
-
assert !_matches_action?({:only => [:index, :new, :create]}, :update)
|
124
|
-
end
|
125
|
-
|
126
|
-
test "does not match action when there are inclusive restrictions on action (symbol)" do
|
127
|
-
assert !_matches_action?({:only => :index}, :update)
|
128
|
-
end
|
129
|
-
|
130
|
-
test "does not match action when there are exclusive restrictions on action (array)" do
|
131
|
-
assert !_matches_action?({:except => [:update, :create, :delete]}, :update)
|
132
|
-
end
|
133
|
-
|
134
|
-
test "does not match action when there are exclusive restrictions on action (symbol)" do
|
135
|
-
assert !_matches_action?({:except => :update}, :update)
|
136
|
-
end
|
137
|
-
|
138
|
-
test "accepts a block when it's not there" do
|
139
|
-
assert _block_is_successful?(nil)
|
140
|
-
end
|
141
|
-
|
142
|
-
test "accepts a block when it returns true" do
|
143
|
-
assert _block_is_successful?(lambda { true })
|
144
|
-
end
|
145
|
-
|
146
|
-
test "refuses a block when it returns false" do
|
147
|
-
assert !_block_is_successful?(lambda { false })
|
148
|
-
end
|
149
|
-
|
150
|
-
test "matches scope when there is no scope" do
|
151
|
-
assert _matches_scope?(nil, {}, nil)
|
152
|
-
end
|
153
|
-
|
154
|
-
test "matches scope when the object ID matches the ID in the params" do
|
155
|
-
assert _matches_scope?(:organization,
|
156
|
-
{:organization_id => 12}.with_indifferent_access,
|
157
|
-
Resource.new(:organization => Resource.new(:id => 12)))
|
158
|
-
end
|
159
|
-
|
160
|
-
test "does not match scope when the ID in the params is blank" do
|
161
|
-
assert !_matches_scope?(:organization,
|
162
|
-
{}.with_indifferent_access,
|
163
|
-
Resource.new(:organization => Resource.new(:id => 12)))
|
164
|
-
end
|
165
|
-
|
166
|
-
test "does not match scope when the object ID is nil" do
|
167
|
-
assert !_matches_scope?(:organization,
|
168
|
-
{:organization_id => 12}.with_indifferent_access,
|
169
|
-
Resource.new(:organization => Resource.new(:id => nil)))
|
170
|
-
end
|
171
|
-
|
172
|
-
test "does not match scope when both params are blank and the object ID is nil" do
|
173
|
-
assert !_matches_scope?(:organization,
|
174
|
-
{}.with_indifferent_access,
|
175
|
-
Resource.new(:organization => Resource.new(:id => nil)))
|
176
|
-
end
|
177
|
-
|
178
|
-
test "does not match scope when the object ID does not match the ID in the params" do
|
179
|
-
assert !_matches_scope?(:organization,
|
180
|
-
{:organization_id => 32 }.with_indifferent_access,
|
181
|
-
Resource.new(:organization => Resource.new(:id => 65)))
|
182
|
-
end
|
183
|
-
|
184
|
-
test "matches user resource when it doesn't have to run" do
|
185
|
-
assert _matches_user_resource?(false, {}, nil)
|
186
|
-
end
|
187
|
-
|
188
|
-
test "matches user resource when it matches the params" do
|
189
|
-
assert _matches_user_resource?(true, {:id => 12}.with_indifferent_access, Resource.new(:id => 12))
|
190
|
-
end
|
191
|
-
|
192
|
-
test "does not match user resource when the params are empty" do
|
193
|
-
assert !_matches_user_resource?(true, {}.with_indifferent_access, Resource.new(:id => 12))
|
194
|
-
end
|
195
|
-
|
196
|
-
test "does not match user resource when the params are wrong" do
|
197
|
-
assert !_matches_user_resource?(true, {:id => 32}.with_indifferent_access, Resource.new(:id => 12))
|
198
|
-
end
|
199
|
-
|
200
|
-
test "does not match user resource when the resource has no ID" do
|
201
|
-
assert !_matches_user_resource?(true, {:id => 12}.with_indifferent_access, Resource.new(:id => nil))
|
202
|
-
end
|
203
|
-
|
204
|
-
test "matches authenticated requirement when it doesn't have to run (boolean)" do
|
205
|
-
assert _matches_authenticated_requirement?(false, nil)
|
206
|
-
end
|
207
|
-
|
208
|
-
test "matches authenticated requirement when it doesn't have to run (nil)" do
|
209
|
-
assert _matches_authenticated_requirement?(nil, nil)
|
210
|
-
end
|
211
|
-
|
212
|
-
test "matches authenticated requirement when authenticated is thruthy" do
|
213
|
-
assert _matches_authenticated_requirement?(true, Resource.new)
|
214
|
-
end
|
215
|
-
|
216
|
-
test "does not match authenticated requirement when authenticated is not thruthy (boolean)" do
|
217
|
-
assert !_matches_authenticated_requirement?(true, false)
|
218
|
-
end
|
219
|
-
|
220
|
-
test "does not match authenticated requirement when authenticated is not thruthy (nil)" do
|
221
|
-
assert !_matches_authenticated_requirement?(true, nil)
|
222
|
-
end
|
223
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
require 'controllers/application_controller'
|
4
|
-
require 'controllers/users_controller'
|
5
|
-
require 'models/resource'
|
6
|
-
|
7
|
-
class StructuralTest < ActionController::TestCase
|
8
|
-
tests UsersController
|
9
|
-
|
10
|
-
def setup
|
11
|
-
@controller.authenticated = Resource.new(:role => :admin)
|
12
|
-
end
|
13
|
-
|
14
|
-
test "rules should be in place" do
|
15
|
-
assert @controller.__send__(:access_allowed_for)
|
16
|
-
end
|
17
|
-
|
18
|
-
test "role accessors should not be public" do
|
19
|
-
assert @acontroller.public_methods.grep(/access_allowed_for/).empty?
|
20
|
-
end
|
21
|
-
end
|
data/test/controllers/all.rb
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
require 'controllers/application_controller'
|
2
|
-
require 'controllers/authenticated_controller'
|
3
|
-
require 'controllers/broken_block_controller'
|
4
|
-
require 'controllers/complicated_controller'
|
5
|
-
require 'controllers/public_controller'
|
6
|
-
require 'controllers/multiple_roles_controller'
|
7
|
-
require 'controllers/users_controller'
|
@@ -1,16 +0,0 @@
|
|
1
|
-
class ApplicationController < ActionController::Base
|
2
|
-
attr_accessor :authenticated
|
3
|
-
|
4
|
-
before_filter :block_access
|
5
|
-
|
6
|
-
def access_forbidden
|
7
|
-
head :forbidden
|
8
|
-
false
|
9
|
-
end
|
10
|
-
|
11
|
-
def logger
|
12
|
-
@logger ||= Logger.new('/dev/null')
|
13
|
-
end
|
14
|
-
|
15
|
-
def rescue_action(e) raise e end;
|
16
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
class BrokenBlockController < ApplicationController
|
2
|
-
allow_access(:only => :index) { nil.unknown_method }
|
3
|
-
allow_access(:only => :show) { true }
|
4
|
-
allow_access(:authenticated, :only => :edit) { @authenticated.unknown_method }
|
5
|
-
allow_access(:admin, :only => :edit) { @authenticated.unknown_method }
|
6
|
-
|
7
|
-
%w(index show edit).each do |name|
|
8
|
-
define_method(name) { head :ok }
|
9
|
-
end
|
10
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
class ComplicatedController < ApplicationController
|
2
|
-
allow_access :all, :only => :index
|
3
|
-
allow_access :authenticated, :only => [:show, :edit, :update], :user_resource => true
|
4
|
-
|
5
|
-
%w(index show edit update).each do |name|
|
6
|
-
define_method(name) { head :ok }
|
7
|
-
end
|
8
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
class UsersController < ApplicationController
|
2
|
-
allow_access :admin
|
3
|
-
allow_access :editor, :only => [:index, :show]
|
4
|
-
allow_access(:guest, :only => :guest) { params[:action] == 'guest' }
|
5
|
-
allow_access :tester, :only => :show, :user_resource => true
|
6
|
-
allow_access :reader, :only => :show, :scope => :organization
|
7
|
-
allow_access :only => :listing
|
8
|
-
allow_access :only => :react
|
9
|
-
|
10
|
-
%w(index show guest listing react).each do |name|
|
11
|
-
define_method(name) { head :ok }
|
12
|
-
end
|
13
|
-
end
|
data/test/helpers/methods.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module MethodsHelpers
|
2
|
-
attr_reader :access_allowed_for, :params
|
3
|
-
|
4
|
-
def logger
|
5
|
-
@logger ||= Logger.new('/dev/null')
|
6
|
-
end
|
7
|
-
|
8
|
-
def do_false
|
9
|
-
false
|
10
|
-
end
|
11
|
-
|
12
|
-
def do_true
|
13
|
-
true
|
14
|
-
end
|
15
|
-
|
16
|
-
def set_rules(rules)
|
17
|
-
@access_allowed_for = rules.with_indifferent_access
|
18
|
-
end
|
19
|
-
|
20
|
-
def set_params(params)
|
21
|
-
@params = params.with_indifferent_access
|
22
|
-
end
|
23
|
-
|
24
|
-
def assert_action_allowed(h)
|
25
|
-
h.each do |(role, action), value|
|
26
|
-
params = {:action => action}.with_indifferent_access
|
27
|
-
assert_equal(value, action_allowed?(params, role), "Expected #{role} to access #{action} with params #{params.inspect}")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def assert_resource_allowed(h)
|
32
|
-
h.each do |(params, role, authenticated), value|
|
33
|
-
params = params.with_indifferent_access
|
34
|
-
authenticated = authenticated ? Resource.new(authenticated) : nil
|
35
|
-
assert_equal(value, resource_allowed?(params, role, authenticated), "Expected #{role} #{authenticated} to access #{params.inspect}")
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def assert_block_allowed(h)
|
40
|
-
h.each do |role, value|
|
41
|
-
assert_equal value, block_allowed?(role)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def assert_block_access(h)
|
46
|
-
h.each do |(role, action), expected|
|
47
|
-
@authenticated = Resource.new(:role => role)
|
48
|
-
@params = {:action => action}.with_indifferent_access
|
49
|
-
assert_equal(expected, block_access, "Expected #{role} #{@authenticated} #{expected ? '' : 'NOT '}to access #{action}")
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/test/models/resource.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
class Resource
|
2
|
-
def initialize(hash={})
|
3
|
-
@attributes = {}
|
4
|
-
hash.each do |k,v|
|
5
|
-
self.send("#{k}=", v)
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
def id
|
10
|
-
@attributes['id']
|
11
|
-
end
|
12
|
-
|
13
|
-
def id=(value)
|
14
|
-
@attributes['id'] = value
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_s
|
18
|
-
"#<Resource:#{object_id} #{@attributes.inspect}>"
|
19
|
-
end
|
20
|
-
|
21
|
-
def method_missing(m, v=nil)
|
22
|
-
if m.to_s =~ /(.*)=$/
|
23
|
-
@attributes[$1] = v
|
24
|
-
else
|
25
|
-
if @attributes.has_key?(m.to_s)
|
26
|
-
@attributes[m.to_s]
|
27
|
-
else
|
28
|
-
raise NoMethodError, "We don't know anything about #{m}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
alias_method :old_respond_to?, :respond_to?
|
34
|
-
def respond_to?(m)
|
35
|
-
old_respond_to?(m) or @attributes.has_key?(m.to_s)
|
36
|
-
end
|
37
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.expand_path('../../shared', __FILE__)
|
2
|
-
|
3
|
-
module AuthorizationSanTest
|
4
|
-
module Initializer
|
5
|
-
def self.load_dependencies
|
6
|
-
if rails_directory
|
7
|
-
$:.unshift(File.join(rails_directory, 'activesupport', 'lib'))
|
8
|
-
$:.unshift(File.join(rails_directory, 'activerecord', 'lib'))
|
9
|
-
else
|
10
|
-
require 'rubygems'
|
11
|
-
gem 'rails', '< 3.0'
|
12
|
-
end
|
13
|
-
|
14
|
-
require 'test/unit'
|
15
|
-
|
16
|
-
require 'active_support'
|
17
|
-
require 'active_support/test_case'
|
18
|
-
require 'active_record'
|
19
|
-
require 'active_record/test_case'
|
20
|
-
require 'active_record/base' # this is needed because of dependency hell
|
21
|
-
require 'action_controller'
|
22
|
-
|
23
|
-
$:.unshift File.expand_path('../../lib', __FILE__)
|
24
|
-
require File.join(PLUGIN_ROOT, 'rails', 'init')
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
AuthorizationSanTest::Initializer.start
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.expand_path('../../shared', __FILE__)
|
2
|
-
|
3
|
-
module AuthorizationSanTest
|
4
|
-
module Initializer
|
5
|
-
def self.load_dependencies
|
6
|
-
if rails_directory
|
7
|
-
$:.unshift(File.join(rails_directory, 'activesupport', 'lib'))
|
8
|
-
$:.unshift(File.join(rails_directory, 'activerecord', 'lib'))
|
9
|
-
else
|
10
|
-
require 'rubygems'
|
11
|
-
gem 'rails', '> 3.0'
|
12
|
-
end
|
13
|
-
|
14
|
-
require 'test/unit'
|
15
|
-
|
16
|
-
require 'active_support'
|
17
|
-
require 'active_support/test_case'
|
18
|
-
require 'active_record'
|
19
|
-
require 'active_record/test_case'
|
20
|
-
require 'active_record/base' # this is needed because of dependency hell
|
21
|
-
require 'action_controller'
|
22
|
-
|
23
|
-
$:.unshift File.expand_path('../../lib', __FILE__)
|
24
|
-
require File.join(PLUGIN_ROOT, 'rails', 'init')
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
AuthorizationSanTest::Initializer.start
|
data/test/test_helper/shared.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module AuthorizationSanTest
|
2
|
-
module Initializer
|
3
|
-
VENDOR_RAILS = File.expand_path('../../../../../rails', __FILE__)
|
4
|
-
PLUGIN_ROOT = File.expand_path('../../../', __FILE__)
|
5
|
-
|
6
|
-
def self.rails_directory
|
7
|
-
if File.exist?(VENDOR_RAILS)
|
8
|
-
VENDOR_RAILS
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.start
|
13
|
-
load_dependencies
|
14
|
-
ActionController::Routing::Routes.reload rescue nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|