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,89 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class HelperTest < ActionView::TestCase
|
4
|
+
setup do
|
5
|
+
@helper = Class.new do
|
6
|
+
include ActionView::Helpers
|
7
|
+
include SomeHelper
|
8
|
+
|
9
|
+
attr_accessor :current_user
|
10
|
+
attr_accessor :action_name
|
11
|
+
def controller
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_hamlet
|
16
|
+
( self.current_user = User.create ).has_role! :hamlet
|
17
|
+
end
|
18
|
+
end.new
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
test "has :the_question method" do
|
23
|
+
assert @helper.respond_to? :the_question
|
24
|
+
end
|
25
|
+
|
26
|
+
test "role :hamlet is allowed to be" do
|
27
|
+
assert @helper.set_hamlet
|
28
|
+
|
29
|
+
assert @helper.action_name = 'be'
|
30
|
+
assert @helper.the_question
|
31
|
+
end
|
32
|
+
|
33
|
+
test "role :hamlet is allowed to not_be" do
|
34
|
+
assert @helper.set_hamlet
|
35
|
+
|
36
|
+
assert @helper.action_name = 'not_be'
|
37
|
+
assert @helper.the_question
|
38
|
+
end
|
39
|
+
|
40
|
+
test "not logged in is not allowed to be" do
|
41
|
+
assert_nil @helper.current_user = nil
|
42
|
+
|
43
|
+
assert @helper.action_name = 'be'
|
44
|
+
refute @helper.the_question
|
45
|
+
end
|
46
|
+
|
47
|
+
test "noone is not allowed to be" do
|
48
|
+
assert ( @helper.current_user = User.create )
|
49
|
+
|
50
|
+
assert @helper.action_name = 'be'
|
51
|
+
refute @helper.the_question
|
52
|
+
end
|
53
|
+
|
54
|
+
test "has :show_to method" do
|
55
|
+
assert @helper.respond_to? :show_to
|
56
|
+
end
|
57
|
+
|
58
|
+
test "has :show_to hamlet 'hello hamlet' message" do
|
59
|
+
assert @helper.set_hamlet
|
60
|
+
|
61
|
+
assert message = 'hello hamlet'
|
62
|
+
assert_equal message, @helper.show_to('hamlet') { message }
|
63
|
+
end
|
64
|
+
|
65
|
+
test "has to show message if user has hamlet role on object" do
|
66
|
+
assert foo = Foo.create
|
67
|
+
assert ( @helper.current_user = User.create ).has_role! :hamlet, foo
|
68
|
+
|
69
|
+
assert message = 'hello hamlet'
|
70
|
+
assert_equal message, @helper.show_to(:hamlet, :of => foo) { message }
|
71
|
+
end
|
72
|
+
|
73
|
+
test "has not to show message if user has no hamlet role on object" do
|
74
|
+
assert @helper.set_hamlet
|
75
|
+
|
76
|
+
assert foo = Foo.create
|
77
|
+
assert @helper.current_user.has_role! :hamlet, foo
|
78
|
+
|
79
|
+
assert_nil @helper.show_to('hamlet', :of => Foo.new) { 'hello my prince' }
|
80
|
+
end
|
81
|
+
|
82
|
+
test "has :show_to nothing to NotLoggedIn" do
|
83
|
+
assert_nil @helper.current_user = nil
|
84
|
+
|
85
|
+
assert @helper.action_name = 'be'
|
86
|
+
assert message = 'hello hamlet'
|
87
|
+
assert_nil @helper.show_to(:hamlet) { message }
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,369 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RolesTest < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
assert @user = User.create
|
6
|
+
assert @user2 = User.create
|
7
|
+
assert @foo = Foo.create
|
8
|
+
assert @bar = Bar.create
|
9
|
+
end
|
10
|
+
|
11
|
+
teardown do
|
12
|
+
Acl9.config[:normalize_role_names] = true
|
13
|
+
Acl9.config[:protect_global_roles] = true
|
14
|
+
end
|
15
|
+
|
16
|
+
test "should not set global role with nil object" do
|
17
|
+
|
18
|
+
assert_raise Acl9::NilObjectError do
|
19
|
+
assert @user.has_role! :admin, nil
|
20
|
+
end
|
21
|
+
refute @user.has_role? :admin
|
22
|
+
end
|
23
|
+
|
24
|
+
test "should not have any roles by default" do
|
25
|
+
%w(user manager admin owner).each do |role|
|
26
|
+
refute @user.has_role? role
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
test "#has_role! without object (global role)" do
|
31
|
+
assert_difference -> { Role.count } do
|
32
|
+
assert @user.has_role! :admin
|
33
|
+
end
|
34
|
+
|
35
|
+
assert @user.has_role? :admin
|
36
|
+
refute @user2.has_role? :admin
|
37
|
+
end
|
38
|
+
|
39
|
+
test "should not count global role as object role" do
|
40
|
+
assert @user.has_role! :admin
|
41
|
+
|
42
|
+
[@foo, @bar, Foo, Bar, @user].each do |obj|
|
43
|
+
refute @user.has_role? :admin, obj
|
44
|
+
refute @user.has_roles_for?(obj)
|
45
|
+
assert_equal [], @user.roles_for(obj)
|
46
|
+
end
|
47
|
+
|
48
|
+
[@foo, @bar].each do |obj|
|
49
|
+
refute obj.accepts_role? :admin, @user
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
test "#has_role! with object (object role)" do
|
54
|
+
assert @user.has_role! :manager, @foo
|
55
|
+
|
56
|
+
assert @user.has_role? :manager, @foo
|
57
|
+
assert @user.has_roles_for? @foo
|
58
|
+
assert @user.has_role_for? @foo
|
59
|
+
|
60
|
+
assert roles = @user.roles_for( @foo )
|
61
|
+
assert_equal roles, @foo.accepted_roles_by(@user)
|
62
|
+
assert_equal 1, roles.size
|
63
|
+
assert_equal 'manager', roles.first.name
|
64
|
+
|
65
|
+
refute @user.has_role? :manager, @bar
|
66
|
+
refute @user2.has_role? :manager, @foo
|
67
|
+
|
68
|
+
assert @foo.accepts_role? :manager, @user
|
69
|
+
assert @foo.accepts_role_by? @user
|
70
|
+
assert @foo.accepts_roles_by? @user
|
71
|
+
end
|
72
|
+
|
73
|
+
test "#has_role! with preposition" do
|
74
|
+
assert @user.has_role! :manager, of: @foo
|
75
|
+
assert @user.has_role? :manager, @foo
|
76
|
+
end
|
77
|
+
|
78
|
+
test "#has_role? with preposition" do
|
79
|
+
assert @user.has_role! :manager, @foo
|
80
|
+
assert @user.has_role? :manager, of: @foo
|
81
|
+
end
|
82
|
+
|
83
|
+
test "should count object role also as global role when :protect_global_roles == false" do
|
84
|
+
Acl9.config[:protect_global_roles] = false
|
85
|
+
|
86
|
+
assert @user.has_role! :manager, @foo
|
87
|
+
assert @user.has_role? :manager
|
88
|
+
end
|
89
|
+
|
90
|
+
test "should not count object role as object class role" do
|
91
|
+
assert @user.has_role! :manager, @foo
|
92
|
+
refute @user.has_role? :manager, Foo
|
93
|
+
end
|
94
|
+
|
95
|
+
test "don't count object role as global" do
|
96
|
+
assert @user.has_role! :manager, @foo
|
97
|
+
refute @user.has_role? :manager
|
98
|
+
end
|
99
|
+
|
100
|
+
test "#has_role! with class" do
|
101
|
+
assert @user.has_role! :user, Bar
|
102
|
+
|
103
|
+
assert @user.has_role? :user, Bar
|
104
|
+
assert @user.has_roles_for? Bar
|
105
|
+
assert @user.has_role_for? Bar
|
106
|
+
|
107
|
+
assert roles = @user.roles_for( Bar)
|
108
|
+
assert_equal 1, roles.size
|
109
|
+
assert_equal "user", roles.first.name
|
110
|
+
|
111
|
+
refute @user.has_role? :user, Foo
|
112
|
+
refute @user2.has_role? :user, Bar
|
113
|
+
end
|
114
|
+
|
115
|
+
test "should not count class role as object role" do
|
116
|
+
assert @user.has_role! :manager, Foo
|
117
|
+
refute @user.has_role? :manager, @foo
|
118
|
+
end
|
119
|
+
|
120
|
+
test "should be able to have several roles on the same object" do
|
121
|
+
assert @user.has_role! :manager, @foo
|
122
|
+
assert @user.has_role! :user, @foo
|
123
|
+
assert @user.has_role! :admin, @foo
|
124
|
+
|
125
|
+
assert @user.has_role! :owner, @bar
|
126
|
+
|
127
|
+
assert_equal_elements %w(admin manager user), @user.roles_for(@foo).map(&:name)
|
128
|
+
assert_equal_elements %w(admin manager user), @foo.accepted_roles_by(@user).map(&:name)
|
129
|
+
end
|
130
|
+
|
131
|
+
test "should reuse existing roles" do
|
132
|
+
@user.has_role! :owner, @bar
|
133
|
+
@user2.has_role! :owner, @bar
|
134
|
+
|
135
|
+
assert_equal @user2.role_objects, @user.role_objects
|
136
|
+
end
|
137
|
+
|
138
|
+
test "#has_no_role! should unassign a global role from user" do
|
139
|
+
set_some_roles
|
140
|
+
|
141
|
+
assert_difference -> { @user.role_objects.count }, -1 do
|
142
|
+
assert @user.has_no_role! '3133t'
|
143
|
+
end
|
144
|
+
|
145
|
+
refute @user.has_role? '3133t'
|
146
|
+
end
|
147
|
+
|
148
|
+
test "#has_no_role! should unassign an object role from user" do
|
149
|
+
set_some_roles
|
150
|
+
|
151
|
+
assert_difference -> { @user.role_objects.count }, -1 do
|
152
|
+
assert @user.has_no_role! :manager, @foo
|
153
|
+
end
|
154
|
+
|
155
|
+
refute @user.has_role? :manager, @foo
|
156
|
+
assert @user.has_role? :user, @foo # another role on the same object
|
157
|
+
end
|
158
|
+
|
159
|
+
test "#has_no_role! should unassign an object role from user with preposition" do
|
160
|
+
set_some_roles
|
161
|
+
|
162
|
+
assert_difference -> { @user.role_objects.count }, -1 do
|
163
|
+
assert @user.has_no_role! :manager, at: @foo
|
164
|
+
end
|
165
|
+
|
166
|
+
refute @user.has_role? :manager, @foo
|
167
|
+
assert @user.has_role? :user, @foo # another role on the same object
|
168
|
+
end
|
169
|
+
|
170
|
+
test "#has_no_role! should unassign a class role from user" do
|
171
|
+
set_some_roles
|
172
|
+
|
173
|
+
assert_difference -> { @user.role_objects.count }, -1 do
|
174
|
+
assert @user.has_no_role! :admin, Foo
|
175
|
+
end
|
176
|
+
|
177
|
+
refute @user.has_role? :admin, Foo
|
178
|
+
assert @user.has_role? :admin # global role
|
179
|
+
end
|
180
|
+
|
181
|
+
test "#has_no_roles_for! should unassign global and class roles with nil object" do
|
182
|
+
set_some_roles
|
183
|
+
|
184
|
+
assert_difference -> { @user.role_objects.count }, -4 do
|
185
|
+
assert @user.has_no_roles_for!
|
186
|
+
end
|
187
|
+
|
188
|
+
refute @user.has_role? :admin
|
189
|
+
refute @user.has_role? '3133t'
|
190
|
+
refute @user.has_role? :admin, Foo
|
191
|
+
refute @user.has_role? :manager, Foo
|
192
|
+
end
|
193
|
+
|
194
|
+
test "#has_no_roles_for! should unassign object roles" do
|
195
|
+
set_some_roles
|
196
|
+
|
197
|
+
assert_difference -> { @user.role_objects.count }, -2 do
|
198
|
+
assert @user.has_no_roles_for! @foo
|
199
|
+
end
|
200
|
+
|
201
|
+
refute @user.has_role? :user, @foo
|
202
|
+
refute @user.has_role? :manager, @foo
|
203
|
+
end
|
204
|
+
|
205
|
+
test "#has_no_roles_for! should unassign both class roles and object roles for objects of that class" do
|
206
|
+
set_some_roles
|
207
|
+
|
208
|
+
assert_difference -> { @user.role_objects.count }, -4 do
|
209
|
+
assert @user.has_no_roles_for! Foo
|
210
|
+
end
|
211
|
+
|
212
|
+
refute @user.has_role? :admin, Foo
|
213
|
+
refute @user.has_role? :manager, Foo
|
214
|
+
refute @user.has_role? :user, @foo
|
215
|
+
refute @user.has_role? :manager, @foo
|
216
|
+
end
|
217
|
+
|
218
|
+
test "#has_no_roles! should unassign all roles" do
|
219
|
+
set_some_roles
|
220
|
+
|
221
|
+
@user.has_no_roles!
|
222
|
+
assert_equal 0, @user.role_objects.count
|
223
|
+
end
|
224
|
+
|
225
|
+
test "role setters true even with multiple roles" do
|
226
|
+
assert @user.has_role! :owner, @bar
|
227
|
+
assert @user2.has_role! :owner, @bar
|
228
|
+
|
229
|
+
assert @user.has_no_role! :owner, @bar
|
230
|
+
end
|
231
|
+
|
232
|
+
test "should delete unused roles from table" do
|
233
|
+
assert @user.has_role! :owner, @bar
|
234
|
+
assert @user2.has_role! :owner, @bar
|
235
|
+
|
236
|
+
assert_equal 1, Role.count
|
237
|
+
|
238
|
+
assert @bar.accepts_no_role! :owner, @user2
|
239
|
+
assert_equal 1, Role.count
|
240
|
+
|
241
|
+
assert @bar.accepts_no_role! :owner, @user
|
242
|
+
|
243
|
+
assert_equal 0, Role.count
|
244
|
+
end
|
245
|
+
|
246
|
+
test "should be able to get users that have a role on a authorized object" do
|
247
|
+
assert @user.has_role! :owner, @bar
|
248
|
+
assert @user2.has_role! :owner, @bar
|
249
|
+
|
250
|
+
assert_equal 2, @bar.users.count
|
251
|
+
end
|
252
|
+
|
253
|
+
test "should be able to get users that have a role on a authorized object with text primary key" do
|
254
|
+
|
255
|
+
assert @user = StringUser.create
|
256
|
+
assert @user2 = StringUser.create
|
257
|
+
|
258
|
+
assert uuid = Uuid.create( id: "C41642EE-2780-0001-189F-17F3101B26E0" )
|
259
|
+
|
260
|
+
assert @user.has_role! :owner, uuid
|
261
|
+
assert @user2.has_role! :owner, uuid
|
262
|
+
|
263
|
+
assert_equal 2, uuid.string_users.count
|
264
|
+
end
|
265
|
+
|
266
|
+
test "should accept :symbols as role names" do
|
267
|
+
assert @user.has_role! :admin
|
268
|
+
assert @user.has_role! :_3133t
|
269
|
+
|
270
|
+
assert @user.has_role! :admin, Foo
|
271
|
+
assert @user.has_role! :manager, Foo
|
272
|
+
assert @user.has_role! :user, @foo
|
273
|
+
assert @foo.accepts_role! :manager, @user
|
274
|
+
assert @bar.accepts_role! :owner, @user
|
275
|
+
|
276
|
+
assert @user.has_role?(:admin)
|
277
|
+
assert @user.has_role?(:_3133t)
|
278
|
+
assert @user.has_role?(:admin, Foo)
|
279
|
+
assert @user.has_role?(:manager, @foo)
|
280
|
+
end
|
281
|
+
|
282
|
+
test "remove access for destroyed object" do
|
283
|
+
assert_empty @user.role_objects
|
284
|
+
assert @user.has_role! :admin, @foo
|
285
|
+
refute_empty @user.role_objects
|
286
|
+
assert @user.has_role? :admin, @foo
|
287
|
+
|
288
|
+
assert @foo.destroy
|
289
|
+
refute @foo.accepts_role? :admin, @user
|
290
|
+
|
291
|
+
assert @user.reload
|
292
|
+
assert_empty @user.role_objects
|
293
|
+
refute @user.has_role? :admin, @foo
|
294
|
+
end
|
295
|
+
|
296
|
+
test "remove access for destroyed subject" do
|
297
|
+
assert_empty @foo.accepted_roles
|
298
|
+
assert @foo.accepts_role! :admin, @user
|
299
|
+
refute_empty @foo.accepted_roles
|
300
|
+
assert @foo.accepts_role? :admin, @user
|
301
|
+
|
302
|
+
assert @user.destroy
|
303
|
+
refute @user.has_role? :admin, @foo
|
304
|
+
|
305
|
+
assert @foo.reload
|
306
|
+
assert_empty @foo.accepted_roles
|
307
|
+
refute @foo.accepts_role? :admin, @user
|
308
|
+
end
|
309
|
+
|
310
|
+
test "roles ignore pluralization" do
|
311
|
+
assert @user.has_role! :manager
|
312
|
+
assert @user.has_role? :manager
|
313
|
+
|
314
|
+
assert @user.has_role? :managers
|
315
|
+
assert @user.has_role? 'Manager'
|
316
|
+
assert @user.has_role? 'Managers'
|
317
|
+
|
318
|
+
assert_nil @user.has_role! :managers
|
319
|
+
assert_nil @user.has_role! 'Manager'
|
320
|
+
assert_nil @user.has_role! 'Managers'
|
321
|
+
|
322
|
+
assert @user2.has_role! :managers
|
323
|
+
assert @user2.has_role? :managers
|
324
|
+
assert @user2.has_role? :manager
|
325
|
+
|
326
|
+
assert_nil @user2.has_role! :manager
|
327
|
+
end
|
328
|
+
|
329
|
+
test "non-normalized roles work properly" do
|
330
|
+
Acl9.config[:normalize_role_names] = false
|
331
|
+
assert @user.has_role! :manager
|
332
|
+
assert @user.has_role? :manager
|
333
|
+
refute @user.has_role? :managers
|
334
|
+
|
335
|
+
assert @user.has_role! :managers
|
336
|
+
assert @user.has_role! 'Manager'
|
337
|
+
assert @user.has_role! 'Managers'
|
338
|
+
|
339
|
+
assert_equal 4, @user.role_objects.count
|
340
|
+
|
341
|
+
assert @user2.has_role! :managers
|
342
|
+
assert @user2.has_role? :managers
|
343
|
+
refute @user2.has_role? :manager
|
344
|
+
|
345
|
+
assert @user2.has_role! :manager
|
346
|
+
end
|
347
|
+
|
348
|
+
test "subjects by role" do
|
349
|
+
assert @user.has_role! :admin, @foo
|
350
|
+
assert @user2.has_role! :manager, @foo
|
351
|
+
|
352
|
+
assert_equal_elements [ @user, @user2 ], @foo.users
|
353
|
+
assert_equal_elements [ @user ], @foo.users(:admin)
|
354
|
+
assert_equal_elements [ @user2 ], @foo.users(:manager)
|
355
|
+
end
|
356
|
+
|
357
|
+
private
|
358
|
+
|
359
|
+
def set_some_roles
|
360
|
+
assert @user.has_role! :admin
|
361
|
+
assert @user.has_role! '3133t'
|
362
|
+
|
363
|
+
assert @user.has_role! :admin, Foo
|
364
|
+
assert @user.has_role! :manager, Foo
|
365
|
+
assert @user.has_role! :user, @foo
|
366
|
+
assert @foo.accepts_role! :manager, @user
|
367
|
+
assert @bar.accepts_role! :owner, @user
|
368
|
+
end
|
369
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RolesWithCustomAssociationNamesTest < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
Access.destroy_all
|
6
|
+
[Account, FooBar].each { |model| model.delete_all }
|
7
|
+
|
8
|
+
assert @subj = Account.create!
|
9
|
+
assert @subj2 = Account.create!
|
10
|
+
assert @foobar = FooBar.create!
|
11
|
+
end
|
12
|
+
|
13
|
+
test "should basically work" do
|
14
|
+
assert_difference -> { Access.count }, 2 do
|
15
|
+
assert @subj.has_role! :admin
|
16
|
+
assert @subj.has_role! :user, @foobar
|
17
|
+
end
|
18
|
+
|
19
|
+
assert @subj.has_role? :admin
|
20
|
+
refute @subj2.has_role? :admin
|
21
|
+
|
22
|
+
assert @subj.has_role? :user, @foobar
|
23
|
+
refute @subj2.has_role? :user, @foobar
|
24
|
+
|
25
|
+
@subj.has_no_roles!
|
26
|
+
@subj2.has_no_roles!
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RolesWithCustomClassNamesTest < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
Access.destroy_all
|
6
|
+
[Account, FooBar].each { |model| model.delete_all }
|
7
|
+
|
8
|
+
@subj = Account.create!
|
9
|
+
@subj2 = Account.create!
|
10
|
+
@foobar = FooBar.create!
|
11
|
+
end
|
12
|
+
|
13
|
+
test "should basically work" do
|
14
|
+
assert_difference -> { Access.count }, 2 do
|
15
|
+
assert @subj.has_role! :admin
|
16
|
+
assert @subj.has_role! :user, @foobar
|
17
|
+
end
|
18
|
+
|
19
|
+
assert @subj.has_role? :admin
|
20
|
+
refute @subj2.has_role? :admin
|
21
|
+
|
22
|
+
assert @subj.has_role? :user, @foobar
|
23
|
+
refute @subj2.has_role? :user, @foobar
|
24
|
+
|
25
|
+
assert @subj.has_no_roles!
|
26
|
+
assert @subj2.has_no_roles!
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SystemRolesTest < ActiveSupport::TestCase
|
4
|
+
test "should not delete a system role" do
|
5
|
+
assert role = Role.create( :name => "admin", :system => true)
|
6
|
+
assert role.system
|
7
|
+
assert_equal 1, Role.count
|
8
|
+
|
9
|
+
assert user = User.create
|
10
|
+
assert_difference -> { Role.count }, 0 do
|
11
|
+
assert user.has_role! :admin
|
12
|
+
end
|
13
|
+
|
14
|
+
assert user.has_role? :admin
|
15
|
+
|
16
|
+
assert_difference -> { Role.count }, 0 do
|
17
|
+
assert user.has_no_role! :admin
|
18
|
+
end
|
19
|
+
|
20
|
+
refute user.has_role? :admin
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class UsersRolesAndSubjectsWithNamespacedClassNamesTest < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
assert Other::Role.destroy_all
|
6
|
+
[Other::User, Other::Foo].each { |model| model.delete_all }
|
7
|
+
|
8
|
+
assert @user = Other::User.create!
|
9
|
+
assert @user2 = Other::User.create!
|
10
|
+
assert @foobar = Other::Foo.create!
|
11
|
+
end
|
12
|
+
|
13
|
+
test "should basically work" do
|
14
|
+
assert_difference -> { Other::Role.count }, 2 do
|
15
|
+
assert @user.has_role! :admin
|
16
|
+
assert @user.has_role! :user, @foobar
|
17
|
+
end
|
18
|
+
|
19
|
+
assert @user.has_role?('admin')
|
20
|
+
refute @user2.has_role?('admin')
|
21
|
+
|
22
|
+
assert @user.has_role?(:user, @foobar)
|
23
|
+
refute @user2.has_role?(:user, @foobar)
|
24
|
+
|
25
|
+
assert_equal 1, @foobar.accepted_roles.count
|
26
|
+
|
27
|
+
@user.has_no_roles!
|
28
|
+
@user2.has_no_roles!
|
29
|
+
end
|
30
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
|
5
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
6
|
+
require "rails/test_help"
|
7
|
+
|
8
|
+
Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
|
9
|
+
|
10
|
+
ActiveRecord::Migration.verbose = false
|
11
|
+
|
12
|
+
if Rails.gem_version >= Gem::Version.new('6.0')
|
13
|
+
ActiveRecord::MigrationContext.new(File.expand_path('../dummy/db/migrate', __FILE__), ActiveRecord::SchemaMigration).migrate
|
14
|
+
elsif Rails.gem_version >= Gem::Version.new('5.2.0')
|
15
|
+
ActiveRecord::MigrationContext.new(File.expand_path('../dummy/db/migrate', __FILE__)).migrate
|
16
|
+
else
|
17
|
+
ActiveRecord::Migrator.migrate(File.expand_path('../dummy/db/migrate', __FILE__))
|
18
|
+
end
|
19
|
+
|
20
|
+
$VERBOSE = nil
|
21
|
+
|
22
|
+
class ActionController::TestCase
|
23
|
+
setup do
|
24
|
+
assert Foo.create
|
25
|
+
end
|
26
|
+
|
27
|
+
class << self
|
28
|
+
def test_allowed method, action, params={}
|
29
|
+
test "allowed #{method} #{action}" do
|
30
|
+
if block_given?
|
31
|
+
yield user = User.create
|
32
|
+
params.merge! user_id: user.id
|
33
|
+
end
|
34
|
+
assert send( method, action, params: params )
|
35
|
+
assert_response :ok
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_denied method, action, params={}
|
40
|
+
test "denied #{method} #{action}" do
|
41
|
+
assert_raises Acl9::AccessDenied do
|
42
|
+
if block_given?
|
43
|
+
yield user = User.create
|
44
|
+
params.merge! user_id: user.id
|
45
|
+
end
|
46
|
+
assert send( method, action, params: params )
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class ActiveSupport::TestCase
|
54
|
+
def assert_equal_elements expected, test, message=nil
|
55
|
+
assert_equal [], expected - test, message
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
module BaseTests
|
60
|
+
def self.included(klass)
|
61
|
+
klass.class_eval do
|
62
|
+
test_allowed :get, :index
|
63
|
+
test_allowed :get, :show, id: 1
|
64
|
+
test_denied :get, :new
|
65
|
+
test_denied :get, :edit, id: 1
|
66
|
+
test_denied :post, :create
|
67
|
+
test_denied :put, :update, id: 1
|
68
|
+
test_denied :patch, :update, id: 1
|
69
|
+
test_denied :delete, :destroy, id: 1
|
70
|
+
|
71
|
+
admin = -> (user) { user.has_role! :admin }
|
72
|
+
test_allowed :get, :new, &admin
|
73
|
+
test_allowed :get, :edit, id: 1, &admin
|
74
|
+
test_allowed :post, :create, &admin
|
75
|
+
test_allowed :put, :update, id: 1, &admin
|
76
|
+
test_allowed :patch, :update, id: 1, &admin
|
77
|
+
test_allowed :delete, :destroy, id: 1, &admin
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
module ShouldRespondToAcl
|
83
|
+
def self.included(klass)
|
84
|
+
klass.class_eval do
|
85
|
+
test "#{klass} has :acl method" do
|
86
|
+
assert @controller.respond_to? :acl
|
87
|
+
end
|
88
|
+
|
89
|
+
test "#{klass} has no :acl? method" do
|
90
|
+
refute @controller.respond_to? :acl?
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|