cantango-core 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/.document +5 -0
  2. data/.rspec +3 -0
  3. data/Gemfile +54 -0
  4. data/Gemfile.lock +231 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.mdown +90 -0
  7. data/Rakefile +48 -0
  8. data/VERSION +1 -0
  9. data/cantango-core.gemspec +177 -0
  10. data/lib/cantango/ability.rb +5 -0
  11. data/lib/cantango/ability/base.rb +61 -0
  12. data/lib/cantango/ability/cache.rb +7 -0
  13. data/lib/cantango/ability/cache/key.rb +38 -0
  14. data/lib/cantango/ability/cached.rb +28 -0
  15. data/lib/cantango/ability/executor.rb +7 -0
  16. data/lib/cantango/ability/executor/base.rb +53 -0
  17. data/lib/cantango/ability/executor/cache_mode.rb +33 -0
  18. data/lib/cantango/ability/executor/modes.rb +52 -0
  19. data/lib/cantango/ability/executor/no_cache_mode.rb +17 -0
  20. data/lib/cantango/ability/helper.rb +11 -0
  21. data/lib/cantango/ability/helper/account.rb +13 -0
  22. data/lib/cantango/ability/helper/engine.rb +32 -0
  23. data/lib/cantango/ability/helper/role.rb +21 -0
  24. data/lib/cantango/ability/helper/role_group.rb +21 -0
  25. data/lib/cantango/ability/helper/user.rb +18 -0
  26. data/lib/cantango/cancan/rule.rb +6 -0
  27. data/lib/cantango/core.rb +84 -0
  28. data/lib/cantango/engine.rb +39 -0
  29. data/lib/cantango/filter.rb +5 -0
  30. data/lib/cantango/filter/base.rb +31 -0
  31. data/lib/cantango/helpers.rb +5 -0
  32. data/lib/cantango/helpers/debug.rb +10 -0
  33. data/lib/cantango/loader.rb +5 -0
  34. data/lib/cantango/loader/yaml.rb +33 -0
  35. data/lib/cantango/macros.rb +11 -0
  36. data/lib/cantango/macros/account.rb +14 -0
  37. data/lib/cantango/macros/user.rb +16 -0
  38. data/lib/cantango/model.rb +5 -0
  39. data/lib/cantango/model/guest.rb +25 -0
  40. data/lib/cantango/rails.rb +7 -0
  41. data/lib/cantango/rails/engine.rb +63 -0
  42. data/lib/cantango/rails/helpers/base_helper.rb +29 -0
  43. data/lib/cantango/rails/helpers/controller_helper.rb +17 -0
  44. data/lib/cantango/rails/helpers/rest_helper.rb +76 -0
  45. data/lib/cantango/rails/helpers/view_helper.rb +17 -0
  46. data/lib/cantango/rails/railtie.rb +7 -0
  47. data/lib/cantango/rspec.rb +1 -0
  48. data/lib/cantango/rspec/config.rb +3 -0
  49. data/lib/cantango/rspec/matchers.rb +1 -0
  50. data/lib/cantango/rspec/matchers/be_allowed_to.rb +28 -0
  51. data/lib/cantango/rules.rb +8 -0
  52. data/lib/cantango/rules/adaptor.rb +37 -0
  53. data/lib/cantango/rules/adaptor/active_record.rb +10 -0
  54. data/lib/cantango/rules/adaptor/data_mapper.rb +11 -0
  55. data/lib/cantango/rules/adaptor/generic.rb +16 -0
  56. data/lib/cantango/rules/adaptor/mongo.rb +19 -0
  57. data/lib/cantango/rules/adaptor/mongo_mapper.rb +10 -0
  58. data/lib/cantango/rules/adaptor/mongoid.rb +9 -0
  59. data/lib/cantango/rules/adaptor/relational.rb +13 -0
  60. data/lib/cantango/rules/dsl.rb +24 -0
  61. data/lib/cantango/rules/relation.rb +67 -0
  62. data/lib/cantango/rules/rule_class.rb +11 -0
  63. data/lib/cantango/rules/scope.rb +24 -0
  64. data/lib/cantango/scope.rb +5 -0
  65. data/lib/cantango/scope/ability.rb +20 -0
  66. data/lib/generators/cantango/install/install_generator.rb +37 -0
  67. data/lib/generators/cantango/install/templates/cantango.rb +4 -0
  68. data/lib/generators/cantango/install/templates/categories.yml +0 -0
  69. data/lib/generators/cantango/install/templates/permissions.yml +6 -0
  70. data/spec/cantango/ability/base_spec.rb +73 -0
  71. data/spec/cantango/ability/cached_spec.rb +0 -0
  72. data/spec/cantango/ability/executor/base2.rb +75 -0
  73. data/spec/cantango/ability/executor/base_spec.rb +67 -0
  74. data/spec/cantango/ability/executor/cache_mode_spec.rb +77 -0
  75. data/spec/cantango/ability/executor/modes_spec.rb +68 -0
  76. data/spec/cantango/ability/executor/no_cache_mode_spec.rb +0 -0
  77. data/spec/cantango/cancan/rule_spec.rb +0 -0
  78. data/spec/cantango/core_spec.rb +9 -0
  79. data/spec/cantango/engine_spec.rb +0 -0
  80. data/spec/cantango/filter/base_spec.rb +0 -0
  81. data/spec/cantango/helpers/debug_spec.rb +0 -0
  82. data/spec/cantango/loader/yaml_spec.rb +0 -0
  83. data/spec/cantango/macros/account_spec.rb +0 -0
  84. data/spec/cantango/macros/user_spec.rb +0 -0
  85. data/spec/cantango/rspec/be_allowed_to_spec.rb +0 -0
  86. data/spec/cantango/rules/adaptor/active_record_spec.rb +0 -0
  87. data/spec/cantango/rules/adaptor/data_mapper_spec.rb +0 -0
  88. data/spec/cantango/rules/adaptor/mongo_mapper_spec.rb +0 -0
  89. data/spec/cantango/rules/adaptor/mongoid_spec.rb +0 -0
  90. data/spec/cantango/rules/adaptor_spec.rb +0 -0
  91. data/spec/cantango/rules/dsl_spec.rb +0 -0
  92. data/spec/cantango/rules/relation_spec.rb +0 -0
  93. data/spec/cantango/rules/rule_class_spec.rb +0 -0
  94. data/spec/cantango/rules/scope_spec.rb +0 -0
  95. data/spec/cantango/rules_spec.rb +55 -0
  96. data/spec/cantango/scope/ability_spec.rb +0 -0
  97. data/spec/cantango_spec.rb +0 -0
  98. data/spec/generators/cantango/install_generator_spec.rb +42 -0
  99. data/spec/spec_helper.rb +9 -0
  100. metadata +310 -0
@@ -0,0 +1,68 @@
1
+ require 'rspec'
2
+ require 'cantango'
3
+ # require 'simple_roles'
4
+ require 'fixtures/models'
5
+ require 'cantango/rspec'
6
+
7
+ def config_folder
8
+ File.dirname(__FILE__)+ "/../fixtures/config/"
9
+ end
10
+
11
+ CanTango.configure do |config|
12
+ config.clear!
13
+ config.permits.enabled_types = [:role]
14
+ end
15
+ CanTango.debug!
16
+
17
+ class User
18
+ tango_user
19
+ include_and_extend SimpleRoles
20
+ end
21
+
22
+ class AdminRolePermit < CanTango::Permit::Role
23
+ def initialize ability
24
+ super
25
+ end
26
+
27
+ protected
28
+
29
+ def static_rules
30
+ can :read, Article
31
+ end
32
+
33
+ module Cached
34
+ def permit_rules
35
+ can :edit, Article
36
+ can :delete, Article
37
+ end
38
+ end
39
+ end
40
+
41
+ describe CanTango::Ability::Executor::Modes do
42
+ context 'non-cached only' do
43
+ before do
44
+ CanTango.configure.ability.mode = :no_cache
45
+
46
+ @user = User.new 'admin', 'admin@mail.ru', :role => 'admin'
47
+ @abil = CanTango::AbilityExecutor.new @user
48
+ end
49
+
50
+ subject { CanTango::AbilityExecutor.new @user }
51
+
52
+ describe 'config no_cache' do
53
+ specify { CanTango.configure.ability.modes.should == [:no_cache] }
54
+ end
55
+
56
+ describe 'engines_on?' do
57
+ specify { subject.engines_on?.should be_true }
58
+ end
59
+
60
+ its(:cached_rules) { should be_empty }
61
+ its(:non_cached_rules) { should_not be_empty }
62
+
63
+ describe 'rules contain only non-cached rules' do
64
+ specify { subject.rules.size.should == @abil.non_cached_rules.size }
65
+ specify { subject.rules.size.should == 2 }
66
+ end
67
+ end
68
+ end
File without changes
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ # require 'cantango/core'
4
+
5
+ describe 'cantango/core' do
6
+ specify do
7
+ lambda { CanTango }.should_not raise_error
8
+ end
9
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,55 @@
1
+ require 'rspec'
2
+ require 'cantango'
3
+ require 'fixtures/models'
4
+
5
+ class SystemRolePermit < CanTango::RolePermit
6
+ def initialize ability
7
+ super
8
+ end
9
+
10
+ protected
11
+
12
+ def static_rules
13
+ end
14
+ end
15
+
16
+ def setup
17
+ let (:user) do
18
+ User.new 'kris'
19
+ end
20
+
21
+ let (:user_account) do
22
+ ua = UserAccount.new user
23
+ user.account = ua
24
+ end
25
+
26
+ let (:ability) do
27
+ CanTango::Ability.new user_account
28
+ end
29
+
30
+ let (:permit) do
31
+ SystemRolePermit.new ability
32
+ end
33
+
34
+ let (:executor) do
35
+ CanTango::PermitEngine::Executor::System.new permit, user_account
36
+ end
37
+ end
38
+
39
+
40
+ describe CanTango::Rules do
41
+ setup
42
+
43
+ describe '#can' do
44
+ it "should not have any rules" do
45
+ permit.rules.should be_empty
46
+ end
47
+
48
+ it "should have rules after can" do
49
+ permit.can :read, Comment
50
+ permit.rules.should_not be_empty
51
+ end
52
+ end
53
+ end
54
+
55
+
File without changes
File without changes
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+ require 'generator-spec'
3
+
4
+ # require 'generators/cantango/install/install_generator'
5
+
6
+ require_generator :cantango => :install
7
+
8
+ RSpec::Generator.configure do |config|
9
+ config.debug = true
10
+ config.remove_temp_dir = false
11
+ config.default_rails_root(__FILE__)
12
+ config.lib = File.dirname(__FILE__) + '/../lib'
13
+ config.logger = :stdout # :file
14
+ end
15
+
16
+
17
+ describe Cantango::Generators::InstallGenerator do
18
+ use_helpers :special, :file
19
+
20
+ setup_generator :permit do
21
+ tests Cantango::Generators::InstallGenerator
22
+ end
23
+
24
+ describe 'Run Install generator' do
25
+ before :each do
26
+ @gen_result = with_generator do |g|
27
+ g.run_generator
28
+ end
29
+ end
30
+
31
+ describe 'result of running Install generator' do
32
+ it "should create config files" do
33
+ @gen_result.should have_initializer_file :cantango do |file|
34
+ file.should have_content /engines/
35
+ end
36
+ @gen_result.should have_config_file :categories
37
+ @gen_result.should have_config_file :permissions
38
+ end
39
+ end
40
+ end
41
+ end
42
+
@@ -0,0 +1,9 @@
1
+ require 'rspec'
2
+ require 'cantango/core'
3
+
4
+ # Requires supporting files with custom matchers and macros, etc,
5
+ # in ./support/ and its subdirectories.
6
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
7
+
8
+ RSpec.configure do |config|
9
+ end
metadata ADDED
@@ -0,0 +1,310 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cantango-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kristian Mandrup
9
+ - Stanislaw Pankevich
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-11-25 00:00:00.000000000Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: &895827720 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *895827720
26
+ - !ruby/object:Gem::Dependency
27
+ name: cancan
28
+ requirement: &895827350 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *895827350
37
+ - !ruby/object:Gem::Dependency
38
+ name: sugar-high
39
+ requirement: &895827050 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: 0.6.0
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *895827050
48
+ - !ruby/object:Gem::Dependency
49
+ name: sweetloader
50
+ requirement: &895826690 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 0.1.0
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *895826690
59
+ - !ruby/object:Gem::Dependency
60
+ name: hashie
61
+ requirement: &895826120 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *895826120
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec-rails
72
+ requirement: &895825430 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.6.1
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *895825430
81
+ - !ruby/object:Gem::Dependency
82
+ name: forgery
83
+ requirement: &895824780 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0.3'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *895824780
92
+ - !ruby/object:Gem::Dependency
93
+ name: factory_girl
94
+ requirement: &895824040 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: *895824040
103
+ - !ruby/object:Gem::Dependency
104
+ name: sqlite3
105
+ requirement: &895823270 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: *895823270
114
+ - !ruby/object:Gem::Dependency
115
+ name: rspec
116
+ requirement: &895822590 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: 2.6.0
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: *895822590
125
+ - !ruby/object:Gem::Dependency
126
+ name: jeweler
127
+ requirement: &895821960 !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: 1.6.4
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: *895821960
136
+ - !ruby/object:Gem::Dependency
137
+ name: bundler
138
+ requirement: &895821430 !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: 1.1.rc
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: *895821430
147
+ - !ruby/object:Gem::Dependency
148
+ name: rdoc
149
+ requirement: &895820740 !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ type: :development
156
+ prerelease: false
157
+ version_requirements: *895820740
158
+ - !ruby/object:Gem::Dependency
159
+ name: rake
160
+ requirement: &895809210 !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: 0.9.2.2
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: *895809210
169
+ description: ! 'Define your permission rules as role- or role group specific permits.
170
+
171
+ Integrates well with multiple Devise user acounts.
172
+
173
+ Includes rules caching.
174
+
175
+ Store permissions in yaml file or key-value store'
176
+ email: kmandrup@gmail.com, s.pankevich@gmail.com
177
+ executables: []
178
+ extensions: []
179
+ extra_rdoc_files:
180
+ - LICENSE.txt
181
+ - README.mdown
182
+ files:
183
+ - .document
184
+ - .rspec
185
+ - Gemfile
186
+ - Gemfile.lock
187
+ - LICENSE.txt
188
+ - README.mdown
189
+ - Rakefile
190
+ - VERSION
191
+ - cantango-core.gemspec
192
+ - lib/cantango/ability.rb
193
+ - lib/cantango/ability/base.rb
194
+ - lib/cantango/ability/cache.rb
195
+ - lib/cantango/ability/cache/key.rb
196
+ - lib/cantango/ability/cached.rb
197
+ - lib/cantango/ability/executor.rb
198
+ - lib/cantango/ability/executor/base.rb
199
+ - lib/cantango/ability/executor/cache_mode.rb
200
+ - lib/cantango/ability/executor/modes.rb
201
+ - lib/cantango/ability/executor/no_cache_mode.rb
202
+ - lib/cantango/ability/helper.rb
203
+ - lib/cantango/ability/helper/account.rb
204
+ - lib/cantango/ability/helper/engine.rb
205
+ - lib/cantango/ability/helper/role.rb
206
+ - lib/cantango/ability/helper/role_group.rb
207
+ - lib/cantango/ability/helper/user.rb
208
+ - lib/cantango/cancan/rule.rb
209
+ - lib/cantango/core.rb
210
+ - lib/cantango/engine.rb
211
+ - lib/cantango/filter.rb
212
+ - lib/cantango/filter/base.rb
213
+ - lib/cantango/helpers.rb
214
+ - lib/cantango/helpers/debug.rb
215
+ - lib/cantango/loader.rb
216
+ - lib/cantango/loader/yaml.rb
217
+ - lib/cantango/macros.rb
218
+ - lib/cantango/macros/account.rb
219
+ - lib/cantango/macros/user.rb
220
+ - lib/cantango/model.rb
221
+ - lib/cantango/model/guest.rb
222
+ - lib/cantango/rails.rb
223
+ - lib/cantango/rails/engine.rb
224
+ - lib/cantango/rails/helpers/base_helper.rb
225
+ - lib/cantango/rails/helpers/controller_helper.rb
226
+ - lib/cantango/rails/helpers/rest_helper.rb
227
+ - lib/cantango/rails/helpers/view_helper.rb
228
+ - lib/cantango/rails/railtie.rb
229
+ - lib/cantango/rspec.rb
230
+ - lib/cantango/rspec/config.rb
231
+ - lib/cantango/rspec/matchers.rb
232
+ - lib/cantango/rspec/matchers/be_allowed_to.rb
233
+ - lib/cantango/rules.rb
234
+ - lib/cantango/rules/adaptor.rb
235
+ - lib/cantango/rules/adaptor/active_record.rb
236
+ - lib/cantango/rules/adaptor/data_mapper.rb
237
+ - lib/cantango/rules/adaptor/generic.rb
238
+ - lib/cantango/rules/adaptor/mongo.rb
239
+ - lib/cantango/rules/adaptor/mongo_mapper.rb
240
+ - lib/cantango/rules/adaptor/mongoid.rb
241
+ - lib/cantango/rules/adaptor/relational.rb
242
+ - lib/cantango/rules/dsl.rb
243
+ - lib/cantango/rules/relation.rb
244
+ - lib/cantango/rules/rule_class.rb
245
+ - lib/cantango/rules/scope.rb
246
+ - lib/cantango/scope.rb
247
+ - lib/cantango/scope/ability.rb
248
+ - lib/generators/cantango/install/install_generator.rb
249
+ - lib/generators/cantango/install/templates/cantango.rb
250
+ - lib/generators/cantango/install/templates/categories.yml
251
+ - lib/generators/cantango/install/templates/permissions.yml
252
+ - spec/cantango/ability/base_spec.rb
253
+ - spec/cantango/ability/cached_spec.rb
254
+ - spec/cantango/ability/executor/base2.rb
255
+ - spec/cantango/ability/executor/base_spec.rb
256
+ - spec/cantango/ability/executor/cache_mode_spec.rb
257
+ - spec/cantango/ability/executor/modes_spec.rb
258
+ - spec/cantango/ability/executor/no_cache_mode_spec.rb
259
+ - spec/cantango/cancan/rule_spec.rb
260
+ - spec/cantango/core_spec.rb
261
+ - spec/cantango/engine_spec.rb
262
+ - spec/cantango/filter/base_spec.rb
263
+ - spec/cantango/helpers/debug_spec.rb
264
+ - spec/cantango/loader/yaml_spec.rb
265
+ - spec/cantango/macros/account_spec.rb
266
+ - spec/cantango/macros/user_spec.rb
267
+ - spec/cantango/rspec/be_allowed_to_spec.rb
268
+ - spec/cantango/rules/adaptor/active_record_spec.rb
269
+ - spec/cantango/rules/adaptor/data_mapper_spec.rb
270
+ - spec/cantango/rules/adaptor/mongo_mapper_spec.rb
271
+ - spec/cantango/rules/adaptor/mongoid_spec.rb
272
+ - spec/cantango/rules/adaptor_spec.rb
273
+ - spec/cantango/rules/dsl_spec.rb
274
+ - spec/cantango/rules/relation_spec.rb
275
+ - spec/cantango/rules/rule_class_spec.rb
276
+ - spec/cantango/rules/scope_spec.rb
277
+ - spec/cantango/rules_spec.rb
278
+ - spec/cantango/scope/ability_spec.rb
279
+ - spec/cantango_spec.rb
280
+ - spec/generators/cantango/install_generator_spec.rb
281
+ - spec/spec_helper.rb
282
+ homepage: http://github.com/kristianmandrup/cantango
283
+ licenses:
284
+ - MIT
285
+ post_install_message:
286
+ rdoc_options: []
287
+ require_paths:
288
+ - lib
289
+ required_ruby_version: !ruby/object:Gem::Requirement
290
+ none: false
291
+ requirements:
292
+ - - ! '>='
293
+ - !ruby/object:Gem::Version
294
+ version: '0'
295
+ segments:
296
+ - 0
297
+ hash: 979131823
298
+ required_rubygems_version: !ruby/object:Gem::Requirement
299
+ none: false
300
+ requirements:
301
+ - - ! '>='
302
+ - !ruby/object:Gem::Version
303
+ version: '0'
304
+ requirements: []
305
+ rubyforge_project:
306
+ rubygems_version: 1.8.10
307
+ signing_key:
308
+ specification_version: 3
309
+ summary: CanCan extension with role oriented permission management and more
310
+ test_files: []