acl9 0.12.0 → 2.1.2

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.
Files changed (141) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +22 -0
  5. data/Appraisals +11 -0
  6. data/CHANGELOG.md +114 -0
  7. data/CONTRIBUTING.md +62 -0
  8. data/Gemfile +9 -0
  9. data/Gemfile.lock +141 -0
  10. data/LICENSE +9 -0
  11. data/README.md +308 -0
  12. data/Rakefile +9 -27
  13. data/acl9.gemspec +29 -0
  14. data/bin/appraisal +16 -0
  15. data/bin/bundler +16 -0
  16. data/bin/cc-tddium-post-worker +16 -0
  17. data/bin/erubis +16 -0
  18. data/bin/rackup +16 -0
  19. data/bin/rails +16 -0
  20. data/bin/rake +16 -0
  21. data/bin/sprockets +16 -0
  22. data/bin/tapout +16 -0
  23. data/bin/thor +16 -0
  24. data/bin/tilt +16 -0
  25. data/bin/yard +16 -0
  26. data/bin/yardoc +16 -0
  27. data/bin/yri +16 -0
  28. data/gemfiles/rails_4.0.gemfile +10 -0
  29. data/gemfiles/rails_4.1.gemfile +10 -0
  30. data/gemfiles/rails_4.2.gemfile +10 -0
  31. data/lib/acl9/controller_extensions/dsl_base.rb +36 -55
  32. data/lib/acl9/controller_extensions/generators.rb +1 -1
  33. data/lib/acl9/controller_extensions.rb +1 -1
  34. data/lib/acl9/helpers.rb +12 -5
  35. data/lib/acl9/model_extensions/for_object.rb +20 -5
  36. data/lib/acl9/model_extensions/for_subject.rb +48 -21
  37. data/lib/acl9/model_extensions.rb +22 -25
  38. data/lib/acl9/prepositions.rb +18 -0
  39. data/lib/acl9/version.rb +3 -0
  40. data/lib/acl9.rb +36 -10
  41. data/lib/generators/acl9/setup/USAGE +35 -0
  42. data/lib/generators/acl9/setup/setup_generator.rb +115 -0
  43. data/lib/generators/acl9/setup/templates/create_role_tables.rb +22 -0
  44. data/lib/generators/acl9/setup/templates/role.rb +3 -0
  45. data/test/config_test.rb +55 -0
  46. data/test/controller_extensions/actions_test.rb +199 -0
  47. data/test/controller_extensions/anon_test.rb +39 -0
  48. data/test/controller_extensions/base.rb +96 -0
  49. data/test/controller_extensions/basics_test.rb +44 -0
  50. data/test/controller_extensions/conditions_test.rb +48 -0
  51. data/test/controller_extensions/method_test.rb +70 -0
  52. data/test/controller_extensions/multi_match_test.rb +142 -0
  53. data/test/controller_extensions/multiple_role_arguments_test.rb +135 -0
  54. data/test/controller_extensions/prepositions_test.rb +108 -0
  55. data/test/controller_extensions/pseudo_role_test.rb +26 -0
  56. data/test/controller_extensions/role_test.rb +75 -0
  57. data/test/controllers/acl_action_override_test.rb +24 -0
  58. data/test/controllers/acl_arguments_test.rb +5 -0
  59. data/test/controllers/acl_block_test.rb +5 -0
  60. data/test/controllers/acl_boolean_method_test.rb +5 -0
  61. data/test/controllers/acl_helper_method_test.rb +26 -0
  62. data/test/controllers/acl_ivars_test.rb +15 -0
  63. data/test/controllers/acl_method2_test.rb +6 -0
  64. data/test/controllers/acl_method_test.rb +6 -0
  65. data/test/controllers/acl_object_hash_test.rb +18 -0
  66. data/test/controllers/acl_query_method_named_test.rb +9 -0
  67. data/test/controllers/acl_query_method_test.rb +9 -0
  68. data/test/controllers/acl_query_method_with_lambda_test.rb +9 -0
  69. data/test/controllers/acl_query_mixin.rb +51 -0
  70. data/test/controllers/acl_subject_method_test.rb +15 -0
  71. data/test/controllers/arguments_checking_test.rb +43 -0
  72. data/test/dummy/app/controllers/acl_action_override.rb +15 -0
  73. data/test/dummy/app/controllers/acl_arguments.rb +10 -0
  74. data/test/dummy/app/controllers/acl_block.rb +6 -0
  75. data/test/dummy/app/controllers/acl_boolean_method.rb +23 -0
  76. data/test/dummy/app/controllers/acl_helper_method.rb +11 -0
  77. data/test/dummy/app/controllers/acl_ivars.rb +17 -0
  78. data/test/dummy/app/controllers/acl_method.rb +6 -0
  79. data/test/dummy/app/controllers/acl_method2.rb +6 -0
  80. data/test/dummy/app/controllers/acl_objects_hash.rb +10 -0
  81. data/test/dummy/app/controllers/acl_query_method.rb +9 -0
  82. data/test/dummy/app/controllers/acl_query_method_named.rb +13 -0
  83. data/test/dummy/app/controllers/acl_query_method_with_lambda.rb +9 -0
  84. data/test/dummy/app/controllers/acl_subject_method.rb +16 -0
  85. data/test/dummy/app/controllers/application_controller.rb +7 -0
  86. data/test/dummy/app/controllers/empty_controller.rb +5 -0
  87. data/test/dummy/app/helpers/application_helper.rb +2 -0
  88. data/test/dummy/app/helpers/some_helper.rb +8 -0
  89. data/test/dummy/app/models/.keep +0 -0
  90. data/test/dummy/app/models/access.rb +3 -0
  91. data/test/dummy/app/models/account.rb +3 -0
  92. data/test/dummy/app/models/bar.rb +3 -0
  93. data/test/dummy/app/models/concerns/.keep +0 -0
  94. data/test/dummy/app/models/foo.rb +3 -0
  95. data/test/dummy/app/models/foo_bar.rb +3 -0
  96. data/test/dummy/app/models/other/foo.rb +5 -0
  97. data/test/dummy/app/models/other/role.rb +5 -0
  98. data/test/dummy/app/models/other/user.rb +5 -0
  99. data/test/dummy/app/models/role.rb +3 -0
  100. data/test/dummy/app/models/user.rb +3 -0
  101. data/test/dummy/app/models/uuid.rb +4 -0
  102. data/test/dummy/config/application.rb +23 -0
  103. data/test/dummy/config/boot.rb +4 -0
  104. data/test/dummy/config/database.yml +25 -0
  105. data/test/dummy/config/environment.rb +5 -0
  106. data/test/dummy/config/environments/development.rb +37 -0
  107. data/test/dummy/config/environments/production.rb +78 -0
  108. data/test/dummy/config/environments/test.rb +40 -0
  109. data/test/dummy/config/initializers/assets.rb +8 -0
  110. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  111. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  112. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  113. data/test/dummy/config/initializers/inflections.rb +16 -0
  114. data/test/dummy/config/initializers/mime_types.rb +4 -0
  115. data/test/dummy/config/initializers/secrets.rb +1 -0
  116. data/test/dummy/config/initializers/session_store.rb +3 -0
  117. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  118. data/test/dummy/config/locales/en.yml +23 -0
  119. data/test/dummy/config/routes.rb +3 -0
  120. data/test/dummy/config.ru +4 -0
  121. data/test/dummy/db/migrate/20141117132218_create_tables.rb +99 -0
  122. data/test/helpers/helper_test.rb +89 -0
  123. data/test/models/roles_test.rb +357 -0
  124. data/test/models/roles_with_custom_association_names_test.rb +28 -0
  125. data/test/models/roles_with_custom_class_names_test.rb +28 -0
  126. data/test/models/system_roles_test.rb +22 -0
  127. data/test/models/users_roles_and_subjects_with_namespaced_class_names_test.rb +30 -0
  128. data/test/test_helper.rb +80 -20
  129. data/test/version_test.rb +7 -0
  130. metadata +290 -71
  131. data/CHANGELOG.textile +0 -46
  132. data/README.textile +0 -903
  133. data/VERSION.yml +0 -5
  134. data/lib/acl9/config.rb +0 -11
  135. data/test/access_control_test.rb +0 -338
  136. data/test/dsl_base_test.rb +0 -795
  137. data/test/helpers_test.rb +0 -134
  138. data/test/roles_test.rb +0 -355
  139. data/test/support/controllers.rb +0 -207
  140. data/test/support/models.rb +0 -59
  141. data/test/support/schema.rb +0 -92
@@ -0,0 +1,142 @@
1
+ require_relative 'base'
2
+
3
+ module ControllerExtensions
4
+ class MultiMatchTest < Base
5
+ test "default when nothing else matches" do
6
+ @tester.acl_block! do
7
+ default :allow
8
+ allow :blah
9
+ deny :bzz
10
+ end
11
+
12
+ assert_equal :allow, @tester.default_action
13
+ assert_all_permitted
14
+ end
15
+
16
+ test "should deny when deny is matched, but allow is not" do
17
+ @tester.acl_block! do
18
+ default :allow
19
+ deny all
20
+ allow :blah
21
+ end
22
+
23
+ assert_all_forbidden
24
+ end
25
+
26
+ test "allow allowed and deny denied and default for unmatched" do
27
+ assert ( cool_user = User.create ).has_role! :cool
28
+ assert ( jerk_user = User.create ).has_role! :jerk
29
+
30
+ @tester.acl_block! do
31
+ default :allow
32
+ deny :jerk
33
+ allow :cool
34
+ end
35
+
36
+ assert_forbidden jerk_user
37
+ assert_permitted cool_user
38
+ assert_all_permitted
39
+ end
40
+
41
+ test "allowed by default when both match" do
42
+ assert ( cool_user = User.create ).has_role! :cool
43
+ assert ( jerk_user = User.create ).has_role! :jerk
44
+
45
+ @tester.acl_block! do
46
+ default :allow
47
+ deny :cool
48
+ allow :cool
49
+ end
50
+
51
+ assert_permitted cool_user
52
+ assert_permitted jerk_user
53
+ assert_all_permitted
54
+ end
55
+
56
+ test "allowed by default when both all" do
57
+ assert ( cool_user = User.create ).has_role! :cool
58
+ assert ( jerk_user = User.create ).has_role! :jerk
59
+
60
+ @tester.acl_block! do
61
+ default :allow
62
+ deny all
63
+ allow all
64
+ end
65
+
66
+ assert_permitted cool_user
67
+ assert_permitted jerk_user
68
+ assert_all_permitted
69
+ end
70
+
71
+ test "allow logged_in allows user not anon" do
72
+ @tester.acl_block! do
73
+ allow logged_in
74
+ end
75
+
76
+ assert_forbidden nil
77
+ assert_user_types_permitted
78
+ end
79
+
80
+ test "deny logged_in denies user not anon" do
81
+ @tester.acl_block! do
82
+ default :allow
83
+ deny logged_in
84
+ end
85
+
86
+ assert_permitted nil
87
+ assert_user_types_forbidden
88
+ end
89
+
90
+ test "denies unmatched when default deny" do
91
+ @tester.acl_block! do
92
+ default :deny
93
+ allow :blah
94
+ deny :bzz
95
+ end
96
+
97
+ assert_all_forbidden
98
+ end
99
+
100
+ test "deny all when allow unmatched" do
101
+ @tester.acl_block! do
102
+ default :allow
103
+ deny all
104
+ allow :blah
105
+ end
106
+
107
+ assert_all_forbidden
108
+ end
109
+
110
+ test "allow when allow matches and deny doesn't" do
111
+ @tester.acl_block! do
112
+ default :deny
113
+ deny nil
114
+ allow :admin
115
+ end
116
+
117
+ assert_admins_permitted
118
+ end
119
+
120
+ test "denied by default when both match" do
121
+ assert ( user = User.create ).has_role! :cool
122
+
123
+ @tester.acl_block! do
124
+ default :deny
125
+ deny :cool
126
+ allow :cool
127
+ end
128
+
129
+ assert_forbidden user
130
+ end
131
+
132
+ test "denied by default when both all" do
133
+ @tester.acl_block! do
134
+ default :deny
135
+ deny all
136
+ allow all
137
+ end
138
+
139
+ assert_all_forbidden
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,135 @@
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
+
111
+ assert ( foo = User.create ).has_role! :foo
112
+ assert ( joo = User.create ).has_role! :joo, foo
113
+ assert ( qoo = User.create ).has_role! :qoo, Bar
114
+
115
+ @tester.acl_block! do
116
+ allow :foo, :boo, :to => [:index, :show]
117
+ allow :zoo, :joo, :by => :foo, :to => [:edit, :update]
118
+ allow :qoo, :woo, :of => Bar
119
+ deny :qoo, :woo, :of => Bar, :except => [:delete, :destroy]
120
+ end
121
+
122
+ assert_permitted foo, 'index'
123
+ assert_permitted foo, 'show'
124
+ assert_forbidden foo, 'edit'
125
+ assert_permitted joo, 'edit', :foo => foo
126
+ assert_permitted joo, 'update', :foo => foo
127
+ assert_forbidden joo, 'show', :foo => foo
128
+ assert_forbidden joo, 'show'
129
+ assert_permitted qoo, 'delete'
130
+ assert_permitted qoo, 'destroy'
131
+ assert_forbidden qoo, 'edit'
132
+ assert_forbidden qoo, 'show'
133
+ end
134
+ end
135
+ 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, :_action => :index
6
+ assert_response :ok
7
+ end
8
+
9
+ test "anon can't show" do
10
+ assert get :check_allow, :_action => :show
11
+ assert_response :unauthorized
12
+ end
13
+
14
+ test "normal user can't edit" do
15
+ assert get :check_allow_with_foo, :_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, :_action => :edit, :user_id => user.id
22
+ assert_response :ok
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ require 'test_helper'
2
+
3
+ class ACLArgumentsTest < ActionController::TestCase
4
+ include BaseTests
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'test_helper'
2
+
3
+ class ACLBlockTest < ActionController::TestCase
4
+ include BaseTests
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'test_helper'
2
+
3
+ class ACLBooleanMethodTest < ActionController::TestCase
4
+ include BaseTests
5
+ end
@@ -0,0 +1,26 @@
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, :user_id => @user.id
12
+ assert_select 'div', 'OK'
13
+ end
14
+
15
+ test "another user denied" do
16
+ assert @user.has_role! :owner
17
+
18
+ assert get :allow, :user_id => @user.id
19
+ assert_select 'div', 'OK'
20
+ end
21
+
22
+ test "anon denied" do
23
+ assert get :allow
24
+ assert_select 'div', 'AccessDenied'
25
+ end
26
+ 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, :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, :id => 1, :user_id => user.id
13
+ assert_response :ok
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+
3
+ class ACLMethod2Test < ActionController::TestCase
4
+ include BaseTests
5
+ include ShouldRespondToAcl
6
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+
3
+ class ACLMethodTest < ActionController::TestCase
4
+ include BaseTests
5
+ include ShouldRespondToAcl
6
+ 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, :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,9 @@
1
+ require_relative 'acl_query_mixin'
2
+
3
+ class ACLQueryMethodNamedTest < ActionController::TestCase
4
+ test "should respond to :allow_ay" do
5
+ assert @controller.respond_to? :allow_ay
6
+ end
7
+
8
+ include ACLQueryMixin
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative 'acl_query_mixin'
2
+
3
+ class ACLQueryMethodTest < ActionController::TestCase
4
+ test "should respond to :acl?" do
5
+ assert @controller.respond_to? :acl?
6
+ end
7
+
8
+ include ACLQueryMixin
9
+ end
@@ -0,0 +1,9 @@
1
+ require_relative 'acl_query_mixin'
2
+
3
+ class ACLQueryMethodWithLambdaTest < ActionController::TestCase
4
+ test "should respond to :acl?" do
5
+ assert @controller.respond_to? :acl?
6
+ end
7
+
8
+ include ACLQueryMixin
9
+ end
@@ -0,0 +1,51 @@
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 ( @owneroffoo = User.create ).has_role! :owner, Foo.first_or_create
10
+ end
11
+
12
+ %i[edit update destroy].each do |meth|
13
+ test "should return true for editor/#{meth}" do
14
+ assert @controller.current_user = @editor
15
+ assert @controller.acl? meth
16
+ assert @controller.acl? meth.to_s
17
+ end
18
+
19
+ test "should return false for viewer/#{meth}" do
20
+ assert @controller.current_user = @viewer
21
+ refute @controller.acl? meth
22
+ refute @controller.acl? meth.to_s
23
+ end
24
+ end
25
+
26
+ %i[index show].each do |meth|
27
+ test "should return false for editor/#{meth}" do
28
+ assert @controller.current_user = @editor
29
+ refute @controller.acl? meth
30
+ refute @controller.acl? meth.to_s
31
+ end
32
+
33
+ test "should return true for viewer/#{meth}" do
34
+ assert @controller.current_user = @viewer
35
+ assert @controller.acl? meth
36
+ assert @controller.acl? meth.to_s
37
+ end
38
+ end
39
+
40
+ test "should return false for editor/fooize" do
41
+ assert @controller.current_user = @editor
42
+ refute @controller.acl? :fooize
43
+ end
44
+
45
+ test "should return true for foo owner" do
46
+ assert @controller.current_user = @owneroffoo
47
+ assert @controller.acl? :fooize, :foo => Foo.first
48
+ end
49
+ end
50
+ end
51
+ end