careacademy-acl9 3.3.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.
- checksums.yaml +7 -0
- data/.gitignore +24 -0
- data/.ruby-version +1 -0
- data/.travis.yml +26 -0
- data/Appraisals +23 -0
- data/CHANGELOG.md +122 -0
- data/CONTRIBUTING.md +62 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +167 -0
- data/LICENSE +9 -0
- data/MIT-LICENSE +20 -0
- data/README.md +326 -0
- data/Rakefile +20 -0
- data/TODO +42 -0
- data/acl9.gemspec +27 -0
- data/bin/appraisal +16 -0
- data/bin/bundler +16 -0
- data/bin/cc-tddium-post-worker +16 -0
- data/bin/erubis +16 -0
- data/bin/rackup +16 -0
- data/bin/rails +16 -0
- data/bin/rake +16 -0
- data/bin/sprockets +16 -0
- data/bin/tapout +16 -0
- data/bin/thor +16 -0
- data/bin/tilt +16 -0
- data/bin/yard +16 -0
- data/bin/yardoc +16 -0
- data/bin/yri +16 -0
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails_5.0.gemfile +10 -0
- data/gemfiles/rails_5.1.gemfile +10 -0
- data/gemfiles/rails_5.2.gemfile +9 -0
- data/gemfiles/rails_6.0.gemfile +9 -0
- data/gemfiles/rails_6.1.gemfile +9 -0
- data/gemfiles/rails_7.0.gemfile +9 -0
- data/lib/acl9/controller_extensions/dsl_base.rb +212 -0
- data/lib/acl9/controller_extensions/generators.rb +166 -0
- data/lib/acl9/controller_extensions.rb +85 -0
- data/lib/acl9/helpers.rb +49 -0
- data/lib/acl9/model_extensions/for_object.rb +74 -0
- data/lib/acl9/model_extensions/for_subject.rb +232 -0
- data/lib/acl9/model_extensions.rb +136 -0
- data/lib/acl9/prepositions.rb +18 -0
- data/lib/acl9/version.rb +3 -0
- data/lib/acl9.rb +78 -0
- data/lib/generators/acl9/setup/USAGE +35 -0
- data/lib/generators/acl9/setup/setup_generator.rb +122 -0
- data/lib/generators/acl9/setup/templates/create_role_tables.rb +31 -0
- data/lib/generators/acl9/setup/templates/role.rb +3 -0
- data/test/config_test.rb +55 -0
- data/test/controller_extensions/actions_test.rb +199 -0
- data/test/controller_extensions/anon_test.rb +39 -0
- data/test/controller_extensions/base.rb +96 -0
- data/test/controller_extensions/basics_test.rb +44 -0
- data/test/controller_extensions/conditions_test.rb +48 -0
- data/test/controller_extensions/method_test.rb +70 -0
- data/test/controller_extensions/multi_match_test.rb +142 -0
- data/test/controller_extensions/multiple_role_arguments_test.rb +136 -0
- data/test/controller_extensions/prepositions_test.rb +108 -0
- data/test/controller_extensions/pseudo_role_test.rb +26 -0
- data/test/controller_extensions/role_test.rb +75 -0
- data/test/controllers/acl_action_override_test.rb +24 -0
- data/test/controllers/acl_arguments_test.rb +5 -0
- data/test/controllers/acl_block_test.rb +5 -0
- data/test/controllers/acl_boolean_method_test.rb +5 -0
- data/test/controllers/acl_helper_method_test.rb +29 -0
- data/test/controllers/acl_ivars_test.rb +15 -0
- data/test/controllers/acl_method2_test.rb +6 -0
- data/test/controllers/acl_method_test.rb +6 -0
- data/test/controllers/acl_object_hash_test.rb +18 -0
- data/test/controllers/acl_query_method_named_test.rb +9 -0
- data/test/controllers/acl_query_method_test.rb +9 -0
- data/test/controllers/acl_query_method_with_lambda_test.rb +9 -0
- data/test/controllers/acl_query_mixin.rb +54 -0
- data/test/controllers/acl_subject_method_test.rb +15 -0
- data/test/controllers/arguments_checking_test.rb +43 -0
- data/test/dummy/app/assets/config/manifest.js +0 -0
- data/test/dummy/app/controllers/acl_action_override.rb +15 -0
- data/test/dummy/app/controllers/acl_arguments.rb +10 -0
- data/test/dummy/app/controllers/acl_block.rb +6 -0
- data/test/dummy/app/controllers/acl_boolean_method.rb +23 -0
- data/test/dummy/app/controllers/acl_helper_method.rb +11 -0
- data/test/dummy/app/controllers/acl_ivars.rb +17 -0
- data/test/dummy/app/controllers/acl_method.rb +6 -0
- data/test/dummy/app/controllers/acl_method2.rb +6 -0
- data/test/dummy/app/controllers/acl_objects_hash.rb +10 -0
- data/test/dummy/app/controllers/acl_query_method.rb +9 -0
- data/test/dummy/app/controllers/acl_query_method_named.rb +15 -0
- data/test/dummy/app/controllers/acl_query_method_with_lambda.rb +9 -0
- data/test/dummy/app/controllers/acl_subject_method.rb +16 -0
- data/test/dummy/app/controllers/application_controller.rb +13 -0
- data/test/dummy/app/controllers/empty_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/helpers/some_helper.rb +8 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/access.rb +3 -0
- data/test/dummy/app/models/account.rb +3 -0
- data/test/dummy/app/models/bar.rb +3 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/models/foo.rb +3 -0
- data/test/dummy/app/models/foo_bar.rb +3 -0
- data/test/dummy/app/models/other/foo.rb +5 -0
- data/test/dummy/app/models/other/role.rb +5 -0
- data/test/dummy/app/models/other/user.rb +5 -0
- data/test/dummy/app/models/role.rb +3 -0
- data/test/dummy/app/models/string_object_role.rb +3 -0
- data/test/dummy/app/models/string_user.rb +3 -0
- data/test/dummy/app/models/user.rb +3 -0
- data/test/dummy/app/models/uuid.rb +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +4 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/test.rb +40 -0
- data/test/dummy/config/initializers/assets.rb +8 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/secrets.rb +1 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20141117132218_create_tables.rb +149 -0
- data/test/helpers/helper_test.rb +89 -0
- data/test/models/roles_test.rb +369 -0
- data/test/models/roles_with_custom_association_names_test.rb +28 -0
- data/test/models/roles_with_custom_class_names_test.rb +28 -0
- data/test/models/system_roles_test.rb +22 -0
- data/test/models/users_roles_and_subjects_with_namespaced_class_names_test.rb +30 -0
- data/test/test_helper.rb +94 -0
- data/test/version_test.rb +7 -0
- metadata +321 -0
@@ -0,0 +1,136 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module ControllerExtensions
|
4
|
+
class MultipleRoleArgumentsTest < Base
|
5
|
+
test "#allow should be able to receive a role list (global roles)" do
|
6
|
+
assert ( bzz = User.create ).has_role! :bzz
|
7
|
+
assert ( whoa = User.create ).has_role! :whoa
|
8
|
+
|
9
|
+
@tester.acl_block! do
|
10
|
+
allow :bzz, :whoa
|
11
|
+
end
|
12
|
+
assert_permitted bzz
|
13
|
+
assert_permitted whoa
|
14
|
+
assert_forbidden nil
|
15
|
+
assert_forbidden User.create
|
16
|
+
end
|
17
|
+
|
18
|
+
test "#allow should be able to receive a role list (object roles)" do
|
19
|
+
assert foo = Foo.create
|
20
|
+
assert foo_too = Foo.create
|
21
|
+
|
22
|
+
assert ( maker = User.create ).has_role! :maker, foo
|
23
|
+
assert ( faker = User.create ).has_role! :faker, foo_too
|
24
|
+
|
25
|
+
@tester.acl_block! do
|
26
|
+
allow :maker, :faker, :of => :foo
|
27
|
+
end
|
28
|
+
|
29
|
+
assert_permitted maker, :foo => foo
|
30
|
+
assert_forbidden maker, :foo => foo_too
|
31
|
+
assert_permitted faker, :foo => foo_too
|
32
|
+
assert_forbidden faker, :foo => foo
|
33
|
+
|
34
|
+
assert other = User.create
|
35
|
+
assert_forbidden other, :foo => foo
|
36
|
+
assert_forbidden other, :foo => foo_too
|
37
|
+
assert_forbidden nil
|
38
|
+
end
|
39
|
+
|
40
|
+
test "#allow should be able to receive a role list (class roles)" do
|
41
|
+
assert ( frooble = User.create ).has_role! :frooble, Foo
|
42
|
+
assert ( oombigle = User.create ).has_role! :oombigle, Foo
|
43
|
+
assert ( lame_frooble = User.create ).has_role! :frooble
|
44
|
+
|
45
|
+
@tester.acl_block! do
|
46
|
+
allow :frooble, :oombigle, :by => Foo
|
47
|
+
end
|
48
|
+
assert_permitted frooble
|
49
|
+
assert_permitted oombigle
|
50
|
+
assert_forbidden lame_frooble
|
51
|
+
assert_forbidden nil
|
52
|
+
end
|
53
|
+
|
54
|
+
test "#deny should be able to receive a role list (global roles)" do
|
55
|
+
assert ( bzz = User.create ).has_role! :bzz
|
56
|
+
assert ( whoa = User.create ).has_role! :whoa
|
57
|
+
|
58
|
+
@tester.acl_block! do
|
59
|
+
default :allow
|
60
|
+
deny :bzz, :whoa
|
61
|
+
end
|
62
|
+
|
63
|
+
assert_forbidden bzz
|
64
|
+
assert_forbidden whoa
|
65
|
+
assert_permitted nil
|
66
|
+
assert_permitted User.create
|
67
|
+
end
|
68
|
+
|
69
|
+
test "#deny should be able to receive a role list (object roles)" do
|
70
|
+
assert foo = Foo.create
|
71
|
+
assert foo_too = Foo.create
|
72
|
+
|
73
|
+
assert ( maker = User.create ).has_role! :maker, foo
|
74
|
+
assert ( faker = User.create ).has_role! :faker, foo_too
|
75
|
+
|
76
|
+
@tester.acl_block! do
|
77
|
+
default :allow
|
78
|
+
deny :maker, :faker, :of => :foo
|
79
|
+
end
|
80
|
+
|
81
|
+
assert_forbidden maker, :foo => foo
|
82
|
+
assert_permitted maker, :foo => foo_too
|
83
|
+
assert_forbidden faker, :foo => foo_too
|
84
|
+
assert_permitted faker, :foo => foo
|
85
|
+
|
86
|
+
assert other = User.create
|
87
|
+
assert_permitted other, :foo => foo
|
88
|
+
assert_permitted other, :foo => foo_too
|
89
|
+
assert_permitted nil
|
90
|
+
end
|
91
|
+
|
92
|
+
test "#deny should be able to receive a role list (class roles)" do
|
93
|
+
assert ( frooble = User.create ).has_role! :frooble, Foo
|
94
|
+
assert ( oombigle = User.create ).has_role! :oombigle, Foo
|
95
|
+
assert ( lame_frooble = User.create ).has_role! :frooble
|
96
|
+
|
97
|
+
@tester.acl_block! do
|
98
|
+
default :allow
|
99
|
+
deny :frooble, :oombigle, :by => Foo
|
100
|
+
end
|
101
|
+
|
102
|
+
assert_forbidden frooble
|
103
|
+
assert_forbidden oombigle
|
104
|
+
assert_permitted lame_frooble
|
105
|
+
assert_permitted nil
|
106
|
+
end
|
107
|
+
|
108
|
+
test "should also respect :to and :except" do
|
109
|
+
assert foo = Foo.create
|
110
|
+
assert too = Foo.create
|
111
|
+
|
112
|
+
assert ( goo = User.create ).has_role! :goo
|
113
|
+
assert ( joo = User.create ).has_role! :joo, foo
|
114
|
+
assert ( qoo = User.create ).has_role! :qoo, Bar
|
115
|
+
|
116
|
+
@tester.acl_block! do
|
117
|
+
allow :goo, :boo, :to => [:index, :show]
|
118
|
+
allow :zoo, :joo, :by => :foo, :to => [:edit, :update]
|
119
|
+
allow :qoo, :woo, :of => Bar
|
120
|
+
deny :qoo, :woo, :of => Bar, :except => [:delete, :destroy]
|
121
|
+
end
|
122
|
+
|
123
|
+
assert_permitted goo, 'index'
|
124
|
+
assert_permitted goo, 'show'
|
125
|
+
assert_forbidden goo, 'edit', foo: too
|
126
|
+
assert_permitted joo, 'edit', :foo => foo
|
127
|
+
assert_permitted joo, 'update', :foo => foo
|
128
|
+
assert_forbidden joo, 'show', :foo => foo
|
129
|
+
assert_forbidden joo, 'show', foo: foo
|
130
|
+
assert_permitted qoo, 'delete', foo: too
|
131
|
+
assert_permitted qoo, 'destroy', foo: too
|
132
|
+
assert_forbidden qoo, 'edit', foo: too
|
133
|
+
assert_forbidden qoo, 'show', foo: too
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module ControllerExtensions
|
4
|
+
class PrepositionsTest < Base
|
5
|
+
|
6
|
+
%i[of for in on at by].each do |prep|
|
7
|
+
test "allow :#{prep} => :foo checks @foo" do
|
8
|
+
assert @foo = Foo.first_or_create
|
9
|
+
assert ( user = User.create ).has_role! :manager, @foo
|
10
|
+
|
11
|
+
@tester.acl_block! do
|
12
|
+
allow :manager, prep => :foo
|
13
|
+
end
|
14
|
+
|
15
|
+
assert other_foo = Foo.create
|
16
|
+
|
17
|
+
assert_permitted user, :foo => @foo
|
18
|
+
assert_forbidden user, :foo => other_foo
|
19
|
+
assert_forbidden user, :foo => Foo
|
20
|
+
assert_forbidden nil, :foo => @foo
|
21
|
+
assert_forbidden User.create, :foo => @foo
|
22
|
+
end
|
23
|
+
|
24
|
+
test "invalid allow :#{prep} arg raises ArgumentError" do
|
25
|
+
assert_raise ArgumentError do
|
26
|
+
@tester.acl_block! { allow :hom, :by => 1 }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
test "invalid option raises ArgumentError" do
|
32
|
+
assert @foo = Foo.first_or_create
|
33
|
+
assert ( user = User.create).has_role! :manager, of: @foo
|
34
|
+
|
35
|
+
assert_raise ArgumentError do
|
36
|
+
@tester.acl_block! { allow :manager, of: :foo, something_bad: :foo }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
test "allow class role allowed" do
|
41
|
+
assert ( user = User.create ).has_role! :owner, Foo
|
42
|
+
|
43
|
+
@tester.acl_block! do
|
44
|
+
allow :owner, :of => Foo
|
45
|
+
end
|
46
|
+
|
47
|
+
assert_permitted user
|
48
|
+
assert_forbidden nil
|
49
|
+
assert_forbidden User.create
|
50
|
+
end
|
51
|
+
|
52
|
+
%i[of for in on at by].each do |prep|
|
53
|
+
test "deny :#{prep} => :foo checks @foo" do
|
54
|
+
assert @foo = Foo.first_or_create
|
55
|
+
assert ( user = User.create ).has_role! :thief, @foo
|
56
|
+
|
57
|
+
@tester.acl_block! do
|
58
|
+
default :allow
|
59
|
+
deny :thief, prep => :foo
|
60
|
+
end
|
61
|
+
|
62
|
+
assert_forbidden user, :foo => @foo
|
63
|
+
assert_permitted user, :foo => Foo.create
|
64
|
+
assert_permitted user, :foo => Foo
|
65
|
+
assert_permitted nil, :foo => @foo
|
66
|
+
assert_permitted User.create, :foo => @foo
|
67
|
+
end
|
68
|
+
|
69
|
+
test "invalid deny :#{prep} arg raises ArgumentError" do
|
70
|
+
assert_raise ArgumentError do
|
71
|
+
@tester.acl_block! { deny :her, :for => "him" }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
test "deny class role denied" do
|
77
|
+
assert ( user = User.create ).has_role! :ignorant, Foo
|
78
|
+
|
79
|
+
@tester.acl_block! do
|
80
|
+
default :allow
|
81
|
+
deny :ignorant, :of => Foo
|
82
|
+
end
|
83
|
+
|
84
|
+
assert_forbidden user, Foo
|
85
|
+
assert_permitted nil
|
86
|
+
assert_permitted User.create
|
87
|
+
end
|
88
|
+
|
89
|
+
test "> 1 allow prepositions raises ArgumentError" do
|
90
|
+
assert_raise ArgumentError do
|
91
|
+
@tester.acl_block! { allow :some, :by => :one, :for => :another }
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
test "> 1 deny prepositions raises ArgumentError" do
|
96
|
+
assert_raise ArgumentError do
|
97
|
+
@tester.acl_block! { deny :some, :in => :here, :on => :today }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
test "should raise an ArgumentError when both :to and :except are specified" do
|
102
|
+
assert_raise ArgumentError do
|
103
|
+
@tester.acl_block! { allow all, :to => :index, :except => ['show', 'edit'] }
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module ControllerExtensions
|
4
|
+
class PseudoRoleTest < Base
|
5
|
+
%i[all everyone everybody anyone].each do |pseudorole|
|
6
|
+
test "allow #{pseudorole} allows all" do
|
7
|
+
@tester.acl_block! do
|
8
|
+
allow send pseudorole
|
9
|
+
end
|
10
|
+
|
11
|
+
assert_equal :deny, @tester.default_action
|
12
|
+
assert_all_permitted
|
13
|
+
end
|
14
|
+
|
15
|
+
test "deny #{pseudorole} denies all" do
|
16
|
+
@tester.acl_block! do
|
17
|
+
default :allow
|
18
|
+
deny send pseudorole
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_equal :allow, @tester.default_action
|
22
|
+
assert_all_forbidden
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module ControllerExtensions
|
4
|
+
class RoleTest < Base
|
5
|
+
test "allows admin implicit default" do
|
6
|
+
@tester.acl_block! { allow :admin }
|
7
|
+
|
8
|
+
assert_admins_permitted
|
9
|
+
assert_forbidden nil
|
10
|
+
|
11
|
+
assert ( user = User.create ).has_role! :cool
|
12
|
+
assert_forbidden user
|
13
|
+
end
|
14
|
+
|
15
|
+
test "allow plural admins implicit default" do
|
16
|
+
@tester.acl_block! do
|
17
|
+
allow :admins
|
18
|
+
end
|
19
|
+
|
20
|
+
assert_admins_permitted
|
21
|
+
assert_forbidden nil
|
22
|
+
|
23
|
+
assert ( user = User.create ).has_role! :cool
|
24
|
+
assert_forbidden user
|
25
|
+
end
|
26
|
+
|
27
|
+
test "allow with several roles" do
|
28
|
+
assert ( cool1_user = User.create ).has_role! :cool
|
29
|
+
assert ( cool2_user = User.create ).has_role! :cool
|
30
|
+
assert ( super_user = User.create ).has_role! :super
|
31
|
+
|
32
|
+
@tester.acl_block! do
|
33
|
+
allow :admin
|
34
|
+
allow :cool
|
35
|
+
end
|
36
|
+
|
37
|
+
assert_admins_permitted
|
38
|
+
|
39
|
+
assert_permitted cool1_user
|
40
|
+
assert_permitted cool2_user
|
41
|
+
|
42
|
+
assert_forbidden nil
|
43
|
+
assert_forbidden super_user
|
44
|
+
end
|
45
|
+
|
46
|
+
test "deny plural admins" do
|
47
|
+
@tester.acl_block! do
|
48
|
+
default :allow
|
49
|
+
deny :admins
|
50
|
+
end
|
51
|
+
|
52
|
+
assert_permitted nil
|
53
|
+
assert_permitted User.create
|
54
|
+
assert_admins_forbidden
|
55
|
+
end
|
56
|
+
|
57
|
+
test "deny several roles" do
|
58
|
+
assert ( cool1_user = User.create ).has_role! :cool
|
59
|
+
assert ( cool2_user = User.create ).has_role! :cool
|
60
|
+
assert ( super_user = User.create ).has_role! :super
|
61
|
+
|
62
|
+
@tester.acl_block! do
|
63
|
+
default :allow
|
64
|
+
deny :admin
|
65
|
+
deny :cool
|
66
|
+
end
|
67
|
+
|
68
|
+
assert_permitted nil
|
69
|
+
assert_admins_forbidden
|
70
|
+
assert_forbidden cool1_user
|
71
|
+
assert_forbidden cool2_user
|
72
|
+
assert_permitted super_user
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ACLActionOverrideTest < ActionController::TestCase
|
4
|
+
test "anon can index" do
|
5
|
+
assert get :check_allow, params: { _action: :index }
|
6
|
+
assert_response :ok
|
7
|
+
end
|
8
|
+
|
9
|
+
test "anon can't show" do
|
10
|
+
assert get :check_allow, params: { _action: :show }
|
11
|
+
assert_response :unauthorized
|
12
|
+
end
|
13
|
+
|
14
|
+
test "normal user can't edit" do
|
15
|
+
assert get :check_allow_with_foo, params: { _action: :edit, user_id: User.create.id }
|
16
|
+
assert_response :unauthorized
|
17
|
+
end
|
18
|
+
|
19
|
+
test "foo owner can edit" do
|
20
|
+
assert ( user = User.create ).has_role! :owner, Foo.first_or_create
|
21
|
+
assert get :check_allow_with_foo, params: { _action: :edit, user_id: user.id }
|
22
|
+
assert_response :ok
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ACLHelperMethodTest < ActionController::TestCase
|
4
|
+
setup do
|
5
|
+
assert @user = User.create
|
6
|
+
end
|
7
|
+
|
8
|
+
test "foo owner allowed" do
|
9
|
+
assert @user.has_role! :owner, Foo.first_or_create
|
10
|
+
|
11
|
+
assert get :allow, params: { user_id: @user.id }
|
12
|
+
assert_select 'div', 'OK'
|
13
|
+
end
|
14
|
+
|
15
|
+
test "another user denied" do
|
16
|
+
assert @another = User.create
|
17
|
+
assert @another.has_role! :owner, Foo.first_or_create
|
18
|
+
|
19
|
+
assert @user.has_role! :owner
|
20
|
+
|
21
|
+
assert get :allow, params: { user_id: @user.id }
|
22
|
+
assert_select 'div', 'AccessDenied'
|
23
|
+
end
|
24
|
+
|
25
|
+
test "anon denied" do
|
26
|
+
assert get :allow
|
27
|
+
assert_select 'div', 'AccessDenied'
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ACLIvarsTest < ActionController::TestCase
|
4
|
+
test "owner of foo destroys" do
|
5
|
+
assert ( user = User.create ).has_role! :owner, Bar
|
6
|
+
assert delete :destroy, params: { id: 1, user_id: user.id }
|
7
|
+
assert_response :ok
|
8
|
+
end
|
9
|
+
|
10
|
+
test "bartender at Foo destroys" do
|
11
|
+
assert ( user = User.create ).has_role! :bartender, Foo
|
12
|
+
assert delete :destroy, params: { id: 1, user_id: user.id }
|
13
|
+
assert_response :ok
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ACLObjectsHashTest < ActionController::TestCase
|
4
|
+
setup do
|
5
|
+
assert @user = User.create
|
6
|
+
assert @user.has_role! :owner, Foo.first_or_create
|
7
|
+
end
|
8
|
+
|
9
|
+
test "objects hash preferred to @ivar" do
|
10
|
+
assert get :allow, params: { user_id: @user.id }
|
11
|
+
assert_response :ok
|
12
|
+
end
|
13
|
+
|
14
|
+
test "unauthed for no user" do
|
15
|
+
assert get :allow
|
16
|
+
assert_response :unauthorized
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ACLQueryMixin
|
4
|
+
def self.included base
|
5
|
+
base.class_eval do
|
6
|
+
setup do
|
7
|
+
assert ( @editor = User.create ).has_role! :editor
|
8
|
+
assert ( @viewer = User.create ).has_role! :viewer
|
9
|
+
assert ( @foo = Foo.first_or_create )
|
10
|
+
assert ( @owneroffoo = User.create ).has_role! :owner, @foo
|
11
|
+
|
12
|
+
@controller.before_action
|
13
|
+
end
|
14
|
+
|
15
|
+
%i[edit update destroy].each do |meth|
|
16
|
+
test "should return true for editor/#{meth}" do
|
17
|
+
assert @controller.current_user = @editor
|
18
|
+
assert @controller.acl? meth
|
19
|
+
assert @controller.acl? meth.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
test "should return false for viewer/#{meth}" do
|
23
|
+
assert @controller.current_user = @viewer
|
24
|
+
refute @controller.acl? meth
|
25
|
+
refute @controller.acl? meth.to_s
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
%i[index show].each do |meth|
|
30
|
+
test "should return false for editor/#{meth}" do
|
31
|
+
assert @controller.current_user = @editor
|
32
|
+
refute @controller.acl? meth
|
33
|
+
refute @controller.acl? meth.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
test "should return true for viewer/#{meth}" do
|
37
|
+
assert @controller.current_user = @viewer
|
38
|
+
assert @controller.acl? meth
|
39
|
+
assert @controller.acl? meth.to_s
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
test "should return false for editor/fooize" do
|
44
|
+
assert @controller.current_user = @editor
|
45
|
+
refute @controller.acl? :fooize
|
46
|
+
end
|
47
|
+
|
48
|
+
test "should return true for foo owner" do
|
49
|
+
assert @controller.current_user = @owneroffoo
|
50
|
+
assert @controller.acl? :fooize, foo: Foo.first
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ACLSubjectMethodTest < ActionController::TestCase
|
4
|
+
test "allow the only user to index" do
|
5
|
+
assert ( user = User.create ).has_role! :the_only_one
|
6
|
+
assert get :index, params: { user_id: user.id }
|
7
|
+
assert_response :ok
|
8
|
+
end
|
9
|
+
|
10
|
+
test "deny anonymous to index" do
|
11
|
+
assert_raises Acl9::AccessDenied do
|
12
|
+
assert get :index
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ArgumentsCheckingTest < ActionController::TestCase
|
4
|
+
test "raise ArgumentError without a block" do
|
5
|
+
assert_raise ArgumentError do
|
6
|
+
class FailureController < ApplicationController
|
7
|
+
access_control
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
test "raise ArgumentError with 1st argument which is not a symbol" do
|
13
|
+
assert_raise ArgumentError do
|
14
|
+
class FailureController < ApplicationController
|
15
|
+
access_control 123 do end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
test "raise ArgumentError with more than 1 positional argument" do
|
21
|
+
assert_raise ArgumentError do
|
22
|
+
class FailureController < ApplicationController
|
23
|
+
access_control :foo, :bar do end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
test "raise ArgumentError with helper: true and no method name" do
|
29
|
+
assert_raise ArgumentError do
|
30
|
+
class FailureController < ApplicationController
|
31
|
+
access_control helper: true do end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
test "raise ArgumentError with helper: :method and a method name" do
|
37
|
+
assert_raise ArgumentError do
|
38
|
+
class FailureController < ApplicationController
|
39
|
+
access_control :meth, helper: :another_meth do end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class ACLActionOverride < ApplicationController
|
2
|
+
access_control :allowed?, filter: false do
|
3
|
+
allow all, to: :index
|
4
|
+
deny all, to: :show
|
5
|
+
allow :owner, of: :foo, to: :edit
|
6
|
+
end
|
7
|
+
|
8
|
+
def check_allow
|
9
|
+
head allowed?(params[:_action]) ? :ok : :unauthorized
|
10
|
+
end
|
11
|
+
|
12
|
+
def check_allow_with_foo
|
13
|
+
head allowed?(params[:_action], foo: Foo.first) ? :ok : :unauthorized
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class ACLBooleanMethod < EmptyController
|
2
|
+
access_control :acl, filter: false do
|
3
|
+
allow all, to: [:index, :show], if: :true_meth
|
4
|
+
allow :admin, unless: :false_meth
|
5
|
+
allow all, if: :false_meth
|
6
|
+
allow all, unless: :true_meth
|
7
|
+
end
|
8
|
+
|
9
|
+
before_action :check_acl
|
10
|
+
|
11
|
+
def check_acl
|
12
|
+
if self.acl
|
13
|
+
true
|
14
|
+
else
|
15
|
+
raise Acl9::AccessDenied
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def true_meth; true end
|
22
|
+
def false_meth; false end
|
23
|
+
end
|