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,3 @@
1
+ Dummy::Application.routes.draw do
2
+ get ':controller(/:action(/:id))'
3
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Dummy::Application
@@ -0,0 +1,99 @@
1
+ class CreateTables < ActiveRecord::Migration
2
+ def change
3
+ create_table :roles do |t|
4
+ t.string :name, :limit => 40
5
+ t.boolean :system
6
+ t.string :authorizable_type, :limit => 40
7
+ t.integer :authorizable_id
8
+ t.timestamps null: false
9
+ end
10
+
11
+ add_index :roles, [:authorizable_type, :authorizable_id]
12
+
13
+ create_table :roles_users, id: false do |t|
14
+ t.references :user
15
+ t.references :role
16
+ end
17
+
18
+ add_index :roles_users, :user_id
19
+ add_index :roles_users, :role_id
20
+
21
+ create_table :users do |t|
22
+ t.string :name
23
+ t.timestamps null: false
24
+ end
25
+
26
+ create_table :foos do |t|
27
+ t.string :name
28
+ t.timestamps null: false
29
+ end
30
+
31
+ create_table :bars do |t|
32
+ t.string :name
33
+ t.timestamps null: false
34
+ end
35
+
36
+ create_table :uuids, id: false do |t|
37
+ t.string :uuid, primary_key: true
38
+ t.string :name
39
+ t.timestamps null: false
40
+ end
41
+
42
+ create_table :accounts do |t|
43
+ t.string :name
44
+ t.timestamps null: false
45
+ end
46
+
47
+ create_table :accesses do |t|
48
+ t.string :name
49
+ t.boolean :system
50
+ t.string :authorizable_type, :limit => 40
51
+ t.integer :authorizable_id
52
+ t.timestamps null: false
53
+ end
54
+
55
+ add_index :accesses, [:authorizable_type, :authorizable_id]
56
+
57
+ create_table :accesses_accounts, id: false do |t|
58
+ t.references :account
59
+ t.references :access
60
+ end
61
+
62
+ add_index :accesses_accounts, :access_id
63
+ add_index :accesses_accounts, :account_id
64
+
65
+ create_table :foo_bars do |t|
66
+ t.string :name
67
+ t.timestamps null: false
68
+ end
69
+
70
+
71
+ create_table :other_roles do |t|
72
+ t.string :name, :limit => 40
73
+ t.boolean :system
74
+ t.string :authorizable_type, :limit => 40
75
+ t.integer :authorizable_id
76
+ t.timestamps null: false
77
+ end
78
+
79
+ add_index :other_roles, [:authorizable_type, :authorizable_id]
80
+
81
+ create_table :other_roles_users, id: false do |t|
82
+ t.references :user
83
+ t.references :role
84
+ end
85
+
86
+ add_index :other_roles_users, :user_id
87
+ add_index :other_roles_users, :role_id
88
+
89
+ create_table :other_users do |t|
90
+ t.string :name
91
+ t.timestamps null: false
92
+ end
93
+
94
+ create_table :other_foos do |t|
95
+ t.string :name
96
+ t.timestamps null: false
97
+ end
98
+ end
99
+ end
@@ -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,357 @@
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 have any roles by default" do
17
+ %w(user manager admin owner).each do |role|
18
+ refute @user.has_role? role
19
+ end
20
+ end
21
+
22
+ test "#has_role! without object (global role)" do
23
+ assert_difference -> { Role.count } do
24
+ assert @user.has_role! :admin
25
+ end
26
+
27
+ assert @user.has_role? :admin
28
+ refute @user2.has_role? :admin
29
+ end
30
+
31
+ test "should not count global role as object role" do
32
+ assert @user.has_role! :admin
33
+
34
+ [@foo, @bar, Foo, Bar, @user].each do |obj|
35
+ refute @user.has_role? :admin, obj
36
+ refute @user.has_roles_for?(obj)
37
+ assert_equal [], @user.roles_for(obj)
38
+ end
39
+
40
+ [@foo, @bar].each do |obj|
41
+ refute obj.accepts_role? :admin, @user
42
+ end
43
+ end
44
+
45
+ test "#has_role! with object (object role)" do
46
+ assert @user.has_role! :manager, @foo
47
+
48
+ assert @user.has_role? :manager, @foo
49
+ assert @user.has_roles_for? @foo
50
+ assert @user.has_role_for? @foo
51
+
52
+ assert roles = @user.roles_for( @foo )
53
+ assert_equal roles, @foo.accepted_roles_by(@user)
54
+ assert_equal 1, roles.size
55
+ assert_equal 'manager', roles.first.name
56
+
57
+ refute @user.has_role? :manager, @bar
58
+ refute @user2.has_role? :manager, @foo
59
+
60
+ assert @foo.accepts_role? :manager, @user
61
+ assert @foo.accepts_role_by? @user
62
+ assert @foo.accepts_roles_by? @user
63
+ end
64
+
65
+ test "#has_role! with preposition" do
66
+ assert @user.has_role! :manager, of: @foo
67
+ assert @user.has_role? :manager, @foo
68
+ end
69
+
70
+ test "#has_role? with preposition" do
71
+ assert @user.has_role! :manager, @foo
72
+ assert @user.has_role? :manager, of: @foo
73
+ end
74
+
75
+ test "should count object role also as global role when :protect_global_roles == false" do
76
+ Acl9.config[:protect_global_roles] = false
77
+
78
+ assert @user.has_role! :manager, @foo
79
+ assert @user.has_role? :manager
80
+ end
81
+
82
+ test "should not count object role as object class role" do
83
+ assert @user.has_role! :manager, @foo
84
+ refute @user.has_role? :manager, Foo
85
+ end
86
+
87
+ test "don't count object role as global" do
88
+ assert @user.has_role! :manager, @foo
89
+ refute @user.has_role? :manager
90
+ end
91
+
92
+ test "#has_role! with class" do
93
+ assert @user.has_role! :user, Bar
94
+
95
+ assert @user.has_role? :user, Bar
96
+ assert @user.has_roles_for? Bar
97
+ assert @user.has_role_for? Bar
98
+
99
+ assert roles = @user.roles_for( Bar)
100
+ assert_equal 1, roles.size
101
+ assert_equal "user", roles.first.name
102
+
103
+ refute @user.has_role? :user, Foo
104
+ refute @user2.has_role? :user, Bar
105
+ end
106
+
107
+ test "should not count class role as object role" do
108
+ assert @user.has_role! :manager, Foo
109
+ refute @user.has_role? :manager, @foo
110
+ end
111
+
112
+ test "should be able to have several roles on the same object" do
113
+ assert @user.has_role! :manager, @foo
114
+ assert @user.has_role! :user, @foo
115
+ assert @user.has_role! :admin, @foo
116
+
117
+ assert @user.has_role! :owner, @bar
118
+
119
+ assert_equal_elements %w(admin manager user), @user.roles_for(@foo).map(&:name)
120
+ assert_equal_elements %w(admin manager user), @foo.accepted_roles_by(@user).map(&:name)
121
+ end
122
+
123
+ test "should reuse existing roles" do
124
+ @user.has_role! :owner, @bar
125
+ @user2.has_role! :owner, @bar
126
+
127
+ assert_equal @user2.role_objects, @user.role_objects
128
+ end
129
+
130
+ test "#has_no_role! should unassign a global role from user" do
131
+ set_some_roles
132
+
133
+ assert_difference -> { @user.role_objects.count }, -1 do
134
+ assert @user.has_no_role! '3133t'
135
+ end
136
+
137
+ refute @user.has_role? '3133t'
138
+ end
139
+
140
+ test "#has_no_role! should unassign an object role from user" do
141
+ set_some_roles
142
+
143
+ assert_difference -> { @user.role_objects.count }, -1 do
144
+ assert @user.has_no_role! :manager, @foo
145
+ end
146
+
147
+ refute @user.has_role? :manager, @foo
148
+ assert @user.has_role? :user, @foo # another role on the same object
149
+ end
150
+
151
+ test "#has_no_role! should unassign an object role from user with preposition" do
152
+ set_some_roles
153
+
154
+ assert_difference -> { @user.role_objects.count }, -1 do
155
+ assert @user.has_no_role! :manager, at: @foo
156
+ end
157
+
158
+ refute @user.has_role? :manager, @foo
159
+ assert @user.has_role? :user, @foo # another role on the same object
160
+ end
161
+
162
+ test "#has_no_role! should unassign a class role from user" do
163
+ set_some_roles
164
+
165
+ assert_difference -> { @user.role_objects.count }, -1 do
166
+ assert @user.has_no_role! :admin, Foo
167
+ end
168
+
169
+ refute @user.has_role? :admin, Foo
170
+ assert @user.has_role? :admin # global role
171
+ end
172
+
173
+ test "#has_no_roles_for! should unassign global and class roles with nil object" do
174
+ set_some_roles
175
+
176
+ assert_difference -> { @user.role_objects.count }, -4 do
177
+ assert @user.has_no_roles_for!
178
+ end
179
+
180
+ refute @user.has_role? :admin
181
+ refute @user.has_role? '3133t'
182
+ refute @user.has_role? :admin, Foo
183
+ refute @user.has_role? :manager, Foo
184
+ end
185
+
186
+ test "#has_no_roles_for! should unassign object roles" do
187
+ set_some_roles
188
+
189
+ assert_difference -> { @user.role_objects.count }, -2 do
190
+ assert @user.has_no_roles_for! @foo
191
+ end
192
+
193
+ refute @user.has_role? :user, @foo
194
+ refute @user.has_role? :manager, @foo
195
+ end
196
+
197
+ test "#has_no_roles_for! should unassign both class roles and object roles for objects of that class" do
198
+ set_some_roles
199
+
200
+ assert_difference -> { @user.role_objects.count }, -4 do
201
+ assert @user.has_no_roles_for! Foo
202
+ end
203
+
204
+ refute @user.has_role? :admin, Foo
205
+ refute @user.has_role? :manager, Foo
206
+ refute @user.has_role? :user, @foo
207
+ refute @user.has_role? :manager, @foo
208
+ end
209
+
210
+ test "#has_no_roles! should unassign all roles" do
211
+ set_some_roles
212
+
213
+ @user.has_no_roles!
214
+ assert_equal 0, @user.role_objects.count
215
+ end
216
+
217
+ test "role setters true even with multiple roles" do
218
+ assert @user.has_role! :owner, @bar
219
+ assert @user2.has_role! :owner, @bar
220
+
221
+ assert @user.has_no_role! :owner, @bar
222
+ end
223
+
224
+ test "should delete unused roles from table" do
225
+ assert @user.has_role! :owner, @bar
226
+ assert @user2.has_role! :owner, @bar
227
+
228
+ assert_equal 1, Role.count
229
+
230
+ assert @bar.accepts_no_role! :owner, @user2
231
+ assert_equal 1, Role.count
232
+
233
+ assert @bar.accepts_no_role! :owner, @user
234
+
235
+ assert_equal 0, Role.count
236
+ end
237
+
238
+ test "should be able to get users that have a role on a authorized object" do
239
+ assert @user.has_role! :owner, @bar
240
+ assert @user2.has_role! :owner, @bar
241
+
242
+ assert_equal 2, @bar.users.count
243
+ end
244
+
245
+ test "should be able to get users that have a role on a authorized object with text primary key" do
246
+ assert uuid = Uuid.create( id: "C41642EE-2780-0001-189F-17F3101B26E0" )
247
+
248
+ assert @user.has_role! :owner, uuid
249
+ assert @user2.has_role! :owner, uuid
250
+
251
+ assert_equal 2, uuid.users.count
252
+ end
253
+
254
+ test "should accept :symbols as role names" do
255
+ assert @user.has_role! :admin
256
+ assert @user.has_role! :_3133t
257
+
258
+ assert @user.has_role! :admin, Foo
259
+ assert @user.has_role! :manager, Foo
260
+ assert @user.has_role! :user, @foo
261
+ assert @foo.accepts_role! :manager, @user
262
+ assert @bar.accepts_role! :owner, @user
263
+
264
+ assert @user.has_role?(:admin)
265
+ assert @user.has_role?(:_3133t)
266
+ assert @user.has_role?(:admin, Foo)
267
+ assert @user.has_role?(:manager, @foo)
268
+ end
269
+
270
+ test "remove access for destroyed object" do
271
+ assert_empty @user.role_objects
272
+ assert @user.has_role! :admin, @foo
273
+ refute_empty @user.role_objects
274
+ assert @user.has_role? :admin, @foo
275
+
276
+ assert @foo.destroy
277
+ refute @foo.accepts_role? :admin, @user
278
+
279
+ assert @user.reload
280
+ assert_empty @user.role_objects
281
+ refute @user.has_role? :admin, @foo
282
+ end
283
+
284
+ test "remove access for destroyed subject" do
285
+ assert_empty @foo.accepted_roles
286
+ assert @foo.accepts_role! :admin, @user
287
+ refute_empty @foo.accepted_roles
288
+ assert @foo.accepts_role? :admin, @user
289
+
290
+ assert @user.destroy
291
+ refute @user.has_role? :admin, @foo
292
+
293
+ assert @foo.reload
294
+ assert_empty @foo.accepted_roles
295
+ refute @foo.accepts_role? :admin, @user
296
+ end
297
+
298
+ test "roles ignore pluralization" do
299
+ assert @user.has_role! :manager
300
+ assert @user.has_role? :manager
301
+
302
+ assert @user.has_role? :managers
303
+ assert @user.has_role? 'Manager'
304
+ assert @user.has_role? 'Managers'
305
+
306
+ assert_nil @user.has_role! :managers
307
+ assert_nil @user.has_role! 'Manager'
308
+ assert_nil @user.has_role! 'Managers'
309
+
310
+ assert @user2.has_role! :managers
311
+ assert @user2.has_role? :managers
312
+ assert @user2.has_role? :manager
313
+
314
+ assert_nil @user2.has_role! :manager
315
+ end
316
+
317
+ test "non-normalized roles work properly" do
318
+ Acl9.config[:normalize_role_names] = false
319
+ assert @user.has_role! :manager
320
+ assert @user.has_role? :manager
321
+ refute @user.has_role? :managers
322
+
323
+ assert @user.has_role! :managers
324
+ assert @user.has_role! 'Manager'
325
+ assert @user.has_role! 'Managers'
326
+
327
+ assert_equal 4, @user.role_objects.count
328
+
329
+ assert @user2.has_role! :managers
330
+ assert @user2.has_role? :managers
331
+ refute @user2.has_role? :manager
332
+
333
+ assert @user2.has_role! :manager
334
+ end
335
+
336
+ test "subjects by role" do
337
+ assert @user.has_role! :admin, @foo
338
+ assert @user2.has_role! :manager, @foo
339
+
340
+ assert_equal_elements [ @user, @user2 ], @foo.users
341
+ assert_equal_elements [ @user ], @foo.users(:admin)
342
+ assert_equal_elements [ @user2 ], @foo.users(:manager)
343
+ end
344
+
345
+ private
346
+
347
+ def set_some_roles
348
+ assert @user.has_role! :admin
349
+ assert @user.has_role! '3133t'
350
+
351
+ assert @user.has_role! :admin, Foo
352
+ assert @user.has_role! :manager, Foo
353
+ assert @user.has_role! :user, @foo
354
+ assert @foo.accepts_role! :manager, @user
355
+ assert @bar.accepts_role! :owner, @user
356
+ end
357
+ 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