cantango 0.9.3.2 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +11 -9
- data/VERSION +1 -1
- data/cantango.gemspec +24 -3
- data/lib/cantango/ability/cache/key.rb +6 -2
- data/lib/cantango/ability/cache/reader.rb +3 -0
- data/lib/cantango/ability/cache/session_cache.rb +7 -3
- data/lib/cantango/ability/cache/writer.rb +8 -2
- data/lib/cantango/ability/cache.rb +25 -8
- data/lib/cantango/ability/cache_helpers.rb +4 -13
- data/lib/cantango/ability/cached_executor.rb +0 -0
- data/lib/cantango/ability/engine_helpers.rb +4 -1
- data/lib/cantango/ability/executor.rb +67 -0
- data/lib/cantango/ability/permission_helpers.rb +0 -1
- data/lib/cantango/ability.rb +1 -1
- data/lib/cantango/cached_ability.rb +3 -2
- data/lib/cantango/configuration/engines/cache.rb +0 -3
- data/lib/cantango/configuration/engines/engine.rb +5 -0
- data/lib/cantango/configuration/engines/permission.rb +5 -4
- data/lib/cantango/configuration/engines/permit.rb +0 -5
- data/lib/cantango/configuration/engines/user_ac.rb +6 -3
- data/lib/cantango/configuration/models/active_record.rb +11 -0
- data/lib/cantango/configuration/models/data_mapper.rb +12 -0
- data/lib/cantango/configuration/models/generic.rb +12 -0
- data/lib/cantango/configuration/models/mongo.rb +12 -0
- data/lib/cantango/configuration/models/mongo_mapper.rb +11 -0
- data/lib/cantango/configuration/models/mongoid.rb +13 -0
- data/lib/cantango/configuration/models.rb +27 -2
- data/lib/cantango/configuration/permits.rb +2 -1
- data/lib/cantango/configuration.rb +14 -0
- data/lib/cantango/engine.rb +5 -19
- data/lib/cantango/model/scope.rb +19 -5
- data/lib/cantango/permission_engine/collector.rb +3 -0
- data/lib/cantango/permission_engine/evaluator.rb +5 -0
- data/lib/cantango/permission_engine/factory.rb +3 -0
- data/lib/cantango/permission_engine/loader/permissions.rb +7 -8
- data/lib/cantango/permission_engine/store.rb +0 -1
- data/lib/cantango/permission_engine/yaml_store.rb +15 -4
- data/lib/cantango/permission_engine.rb +21 -4
- data/lib/cantango/permit_engine/factory.rb +10 -4
- data/lib/cantango/permit_engine.rb +39 -9
- data/lib/cantango/permits/account_permit/builder.rb +6 -2
- data/lib/cantango/{user_ac_engine → permits}/executor.rb +28 -30
- data/lib/cantango/permits/permit/class_methods.rb +21 -0
- data/lib/cantango/permits/permit/execute.rb +81 -0
- data/lib/cantango/permits/permit/license.rb +26 -0
- data/lib/cantango/permits/permit.rb +19 -138
- data/lib/cantango/permits/role_group_permit/builder.rb +5 -1
- data/lib/cantango/permits/role_group_permit.rb +3 -3
- data/lib/cantango/permits/role_permit/builder.rb +4 -0
- data/lib/cantango/permits/user_permit/builder.rb +5 -1
- data/lib/cantango/permits/user_permit.rb +1 -1
- data/lib/cantango/permits.rb +1 -0
- data/lib/cantango/rails/engine.rb +0 -3
- data/lib/cantango/rails/helpers/base_helper.rb +1 -1
- data/lib/cantango/rails/helpers/rest_helper.rb +1 -1
- data/lib/cantango/rules/adaptor/active_record.rb +1 -4
- data/lib/cantango/rules/adaptor/data_mapper.rb +11 -0
- data/lib/cantango/rules/adaptor/mongo.rb +19 -0
- data/lib/cantango/rules/adaptor/mongo_mapper.rb +10 -0
- data/lib/cantango/rules/adaptor/mongoid.rb +1 -5
- data/lib/cantango/rules/adaptor/relational.rb +13 -0
- data/lib/cantango/rules/adaptor.rb +12 -7
- data/lib/cantango/rules/user_relation.rb +1 -2
- data/lib/cantango/user_ac_engine.rb +25 -7
- data/lib/cantango.rb +2 -0
- data/spec/cantango/ability/executor_spec.rb +67 -0
- data/spec/cantango/ability_executor/cached_only_spec.rb +1 -0
- data/spec/cantango/model/scope_spec.rb +11 -0
- data/spec/cantango/models/items.rb +5 -0
- data/spec/cantango/permission_engine_cached_spec.rb +51 -0
- data/spec/cantango/permission_engine_spec.rb +55 -0
- data/spec/cantango/permit_engine_cached_spec.rb +56 -0
- data/spec/cantango/permit_engine_spec.rb +57 -1
- data/spec/cantango/permits/executor_cached_spec.rb +0 -0
- data/spec/cantango/permits/executor_spec.rb +68 -0
- data/spec/cantango/user_ac_engine_cached_spec.rb +64 -0
- data/spec/cantango/user_ac_engine_spec.rb +14 -2
- data/spec/fixtures/models/items.rb +3 -0
- data/spec/fixtures/models/user.rb +18 -0
- metadata +55 -34
data/README.textile
CHANGED
@@ -35,17 +35,17 @@ Run bundler in a terminal/console from the folder of your Gemfile (root folder o
|
|
35
35
|
|
36
36
|
@$ bundle@
|
37
37
|
|
38
|
-
h2. Update
|
38
|
+
h2. Update Nov 2, 2011
|
39
39
|
|
40
|
-
|
40
|
+
Version 0.9.4 has been released with the following featuring and improvements:
|
41
41
|
|
42
|
-
|
42
|
+
* Redesign of Cache and Ability execution
|
43
|
+
* Caching at the individual engine level that can be switched (configured) on/off
|
44
|
+
* Individual caching for each type of Permit in the Permit engine
|
45
|
+
* Each engine return a set of rules which are merged into one rule set for that particular execution mode
|
46
|
+
* Caching for the new User AC engine
|
43
47
|
|
44
|
-
|
45
|
-
* Engine _:user_ac_ (User Access Control)
|
46
|
-
* Cache and No-Cache modes for Ability, run in succession and rule results merged
|
47
|
-
|
48
|
-
The :user_ac engine is a port of the Permission system from the _Rails in Action_ book.
|
48
|
+
The :user_ac engine is a port of the Permission system from the _Rails in Action_ book.
|
49
49
|
With this engine a user can have many permissions defined, where each such permission is a persisted Permission model instance that describes a 'can' action on a specific type of object.
|
50
50
|
|
51
51
|
The new modal Ability model allows you to define rules that are run in Cache mode and others that can be run in no-cache mode. This enables you to circumvent the previos restriction that didn't allow you to use normal conditional ruby logic outside blocks if you enabled caching.
|
@@ -53,16 +53,18 @@ The new modal Ability model allows you to define rules that are run in Cache mod
|
|
53
53
|
<pre>
|
54
54
|
class UserPermit < CanTango::UserPermit
|
55
55
|
def static_rules
|
56
|
-
|
56
|
+
can :access, Article
|
57
57
|
end
|
58
58
|
|
59
59
|
module Cached
|
60
60
|
def permit_rules
|
61
|
+
can :read, Project
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
64
65
|
module NonCached
|
65
66
|
def permit_rules
|
67
|
+
can :edit, Article
|
66
68
|
end
|
67
69
|
end
|
68
70
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.4
|
data/cantango.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cantango}
|
8
|
-
s.version = "0.9.
|
8
|
+
s.version = "0.9.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = [%q{Kristian Mandrup}, %q{Stanislaw Pankevich}]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-11-02}
|
13
13
|
s.description = %q{Define your permission rules as role- or role group specific permits.
|
14
14
|
Integrates well with multiple Devise user acounts.
|
15
15
|
Includes rules caching.
|
@@ -41,7 +41,9 @@ Store permissions in yaml file or key-value store}
|
|
41
41
|
"lib/cantango/ability/cache/session_cache.rb",
|
42
42
|
"lib/cantango/ability/cache/writer.rb",
|
43
43
|
"lib/cantango/ability/cache_helpers.rb",
|
44
|
+
"lib/cantango/ability/cached_executor.rb",
|
44
45
|
"lib/cantango/ability/engine_helpers.rb",
|
46
|
+
"lib/cantango/ability/executor.rb",
|
45
47
|
"lib/cantango/ability/masquerade_helpers.rb",
|
46
48
|
"lib/cantango/ability/permission_helpers.rb",
|
47
49
|
"lib/cantango/ability/permit_helpers.rb",
|
@@ -89,6 +91,12 @@ Store permissions in yaml file or key-value store}
|
|
89
91
|
"lib/cantango/configuration/guest.rb",
|
90
92
|
"lib/cantango/configuration/hash_registry.rb",
|
91
93
|
"lib/cantango/configuration/models.rb",
|
94
|
+
"lib/cantango/configuration/models/active_record.rb",
|
95
|
+
"lib/cantango/configuration/models/data_mapper.rb",
|
96
|
+
"lib/cantango/configuration/models/generic.rb",
|
97
|
+
"lib/cantango/configuration/models/mongo.rb",
|
98
|
+
"lib/cantango/configuration/models/mongo_mapper.rb",
|
99
|
+
"lib/cantango/configuration/models/mongoid.rb",
|
92
100
|
"lib/cantango/configuration/modes.rb",
|
93
101
|
"lib/cantango/configuration/permit_registry.rb",
|
94
102
|
"lib/cantango/configuration/permits.rb",
|
@@ -160,11 +168,15 @@ Store permissions in yaml file or key-value store}
|
|
160
168
|
"lib/cantango/permits/account_permit.rb",
|
161
169
|
"lib/cantango/permits/account_permit/builder.rb",
|
162
170
|
"lib/cantango/permits/account_permit/finder.rb",
|
171
|
+
"lib/cantango/permits/executor.rb",
|
163
172
|
"lib/cantango/permits/license.rb",
|
164
173
|
"lib/cantango/permits/license/loader.rb",
|
165
174
|
"lib/cantango/permits/license/rules.rb",
|
166
175
|
"lib/cantango/permits/macros.rb",
|
167
176
|
"lib/cantango/permits/permit.rb",
|
177
|
+
"lib/cantango/permits/permit/class_methods.rb",
|
178
|
+
"lib/cantango/permits/permit/execute.rb",
|
179
|
+
"lib/cantango/permits/permit/license.rb",
|
168
180
|
"lib/cantango/permits/role_group_permit.rb",
|
169
181
|
"lib/cantango/permits/role_group_permit/builder.rb",
|
170
182
|
"lib/cantango/permits/role_group_permit/finder.rb",
|
@@ -191,14 +203,17 @@ Store permissions in yaml file or key-value store}
|
|
191
203
|
"lib/cantango/rules.rb",
|
192
204
|
"lib/cantango/rules/adaptor.rb",
|
193
205
|
"lib/cantango/rules/adaptor/active_record.rb",
|
206
|
+
"lib/cantango/rules/adaptor/data_mapper.rb",
|
194
207
|
"lib/cantango/rules/adaptor/generic.rb",
|
208
|
+
"lib/cantango/rules/adaptor/mongo.rb",
|
209
|
+
"lib/cantango/rules/adaptor/mongo_mapper.rb",
|
195
210
|
"lib/cantango/rules/adaptor/mongoid.rb",
|
211
|
+
"lib/cantango/rules/adaptor/relational.rb",
|
196
212
|
"lib/cantango/rules/dsl.rb",
|
197
213
|
"lib/cantango/rules/rule_class.rb",
|
198
214
|
"lib/cantango/rules/scope.rb",
|
199
215
|
"lib/cantango/rules/user_relation.rb",
|
200
216
|
"lib/cantango/user_ac_engine.rb",
|
201
|
-
"lib/cantango/user_ac_engine/executor.rb",
|
202
217
|
"lib/cantango/users.rb",
|
203
218
|
"lib/cantango/users/macros.rb",
|
204
219
|
"lib/cantango/users/masquerade.rb",
|
@@ -299,6 +314,7 @@ Store permissions in yaml file or key-value store}
|
|
299
314
|
"spec/cantango/ability/cache/session_cache_spec.rb",
|
300
315
|
"spec/cantango/ability/cache/writer_spec.rb",
|
301
316
|
"spec/cantango/ability/cache_spec.rb",
|
317
|
+
"spec/cantango/ability/executor_spec.rb",
|
302
318
|
"spec/cantango/ability_executor/cached_only_spec.rb",
|
303
319
|
"spec/cantango/ability_executor_spec.rb",
|
304
320
|
"spec/cantango/ability_filters_spec.rb",
|
@@ -365,6 +381,7 @@ Store permissions in yaml file or key-value store}
|
|
365
381
|
"spec/cantango/permission_engine/store_spec.rb",
|
366
382
|
"spec/cantango/permission_engine/user_permission_store_spec.rb",
|
367
383
|
"spec/cantango/permission_engine/yaml_store_spec.rb",
|
384
|
+
"spec/cantango/permission_engine_cached_spec.rb",
|
368
385
|
"spec/cantango/permission_engine_spec.rb",
|
369
386
|
"spec/cantango/permit_engine/account_permit_spec.rb",
|
370
387
|
"spec/cantango/permit_engine/builder/role_group_permits_spec.rb",
|
@@ -378,10 +395,14 @@ Store permissions in yaml file or key-value store}
|
|
378
395
|
"spec/cantango/permit_engine/role_group_permit_spec.rb",
|
379
396
|
"spec/cantango/permit_engine/role_permit_spec.rb",
|
380
397
|
"spec/cantango/permit_engine/user_permit_spec.rb",
|
398
|
+
"spec/cantango/permit_engine_cached_spec.rb",
|
381
399
|
"spec/cantango/permit_engine_spec.rb",
|
400
|
+
"spec/cantango/permits/executor_cached_spec.rb",
|
401
|
+
"spec/cantango/permits/executor_spec.rb",
|
382
402
|
"spec/cantango/permits/macros_spec.rb",
|
383
403
|
"spec/cantango/permits/permit_spec.rb",
|
384
404
|
"spec/cantango/rules_spec.rb",
|
405
|
+
"spec/cantango/user_ac_engine_cached_spec.rb",
|
385
406
|
"spec/cantango/user_ac_engine_spec.rb",
|
386
407
|
"spec/cantango_spec.rb",
|
387
408
|
"spec/devise-dummy/Rakefile",
|
@@ -7,7 +7,7 @@ module CanTango
|
|
7
7
|
def initialize user, subject = nil, method_names = nil
|
8
8
|
@user = user
|
9
9
|
@subject = subject || user
|
10
|
-
@method_names = method_names
|
10
|
+
@method_names = method_names if method_names
|
11
11
|
end
|
12
12
|
|
13
13
|
def method_names
|
@@ -19,7 +19,7 @@ module CanTango
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def value
|
22
|
-
raise "No key could be generated for
|
22
|
+
raise "No key could be generated for User:#{user.inspect} and Subject:#{subject} - key field: #{user_key_field}" if hash_values.empty?
|
23
23
|
@value ||= hash_values.hash
|
24
24
|
end
|
25
25
|
|
@@ -28,6 +28,10 @@ module CanTango
|
|
28
28
|
session[:cache_key] && (value == session[:cache_key].value)
|
29
29
|
end
|
30
30
|
|
31
|
+
def to_s
|
32
|
+
"key hash: #{value}"
|
33
|
+
end
|
34
|
+
|
31
35
|
protected
|
32
36
|
|
33
37
|
def hash_values
|
@@ -2,6 +2,8 @@ module CanTango
|
|
2
2
|
class Ability
|
3
3
|
class Cache
|
4
4
|
class Reader
|
5
|
+
include CanTango::Helpers::Debug
|
6
|
+
|
5
7
|
attr_reader :cache
|
6
8
|
|
7
9
|
def initialize cache
|
@@ -9,6 +11,7 @@ module CanTango
|
|
9
11
|
end
|
10
12
|
|
11
13
|
def prepared_rules
|
14
|
+
debug "reading rules from cache: #{cache.key}"
|
12
15
|
cache.compile_on? ? compiler.decompile!(loaded_rules) : loaded_rules
|
13
16
|
end
|
14
17
|
|
@@ -3,6 +3,7 @@ module CanTango
|
|
3
3
|
class Cache
|
4
4
|
class SessionCache < BaseCache
|
5
5
|
attr_accessor :session
|
6
|
+
attr_reader :key
|
6
7
|
|
7
8
|
# will be called with :session => session (pointing to user session)
|
8
9
|
def initialize name, options = {}
|
@@ -10,11 +11,15 @@ module CanTango
|
|
10
11
|
@cache = cache
|
11
12
|
@cache.configure_with :type => :memory
|
12
13
|
raise "SessionCache must be initialized with a :session option" if !session
|
13
|
-
session[
|
14
|
+
session[cache_key] = @cache
|
15
|
+
end
|
16
|
+
|
17
|
+
def cache_key
|
18
|
+
@cache_key ||= :rules_cache
|
14
19
|
end
|
15
20
|
|
16
21
|
def store
|
17
|
-
session[
|
22
|
+
session[cache_key]
|
18
23
|
end
|
19
24
|
|
20
25
|
def load key
|
@@ -31,7 +36,6 @@ module CanTango
|
|
31
36
|
|
32
37
|
def cache
|
33
38
|
CanTango::Cache::HashCache.instance
|
34
|
-
# CanTango::Cache::MonetaCache.instance
|
35
39
|
end
|
36
40
|
end
|
37
41
|
end
|
@@ -2,7 +2,11 @@ module CanTango
|
|
2
2
|
class Ability
|
3
3
|
class Cache
|
4
4
|
class Writer
|
5
|
-
|
5
|
+
include CanTango::Helpers::Debug
|
6
|
+
|
7
|
+
attr_reader :cache, :cache_key
|
8
|
+
|
9
|
+
delegate :cache_key, :to => :cache
|
6
10
|
|
7
11
|
def initialize cache
|
8
12
|
@cache = cache
|
@@ -10,8 +14,10 @@ module CanTango
|
|
10
14
|
|
11
15
|
def save key, rules
|
12
16
|
cache.invalidate!
|
17
|
+
return if prepared_rules.blank?
|
18
|
+
debug "writing #{prepared_rules.size} rules to cache: #{key}"
|
13
19
|
cache.rules_cache.save cache.key, prepared_rules
|
14
|
-
session[
|
20
|
+
session[cache_key] = cache.key if session
|
15
21
|
end
|
16
22
|
|
17
23
|
protected
|
@@ -3,22 +3,39 @@ module CanTango
|
|
3
3
|
class Cache
|
4
4
|
autoload_modules :BaseCache, :SessionCache, :Reader, :Writer, :RulesCache, :Key
|
5
5
|
|
6
|
+
include CanTango::Helpers::Debug
|
7
|
+
include CanTango::Helpers::RoleMethods
|
8
|
+
|
6
9
|
attr_reader :rules_cached, :ability
|
10
|
+
attr_writer :key_method_names, :cache_key
|
11
|
+
|
12
|
+
delegate :session, :cached?, :to => :ability
|
7
13
|
|
8
|
-
def initialize ability
|
14
|
+
def initialize ability, options = {}
|
9
15
|
@ability = ability
|
16
|
+
@cache_key = options[:cache_key]
|
17
|
+
@key_method_names = options[:key_method_names]
|
18
|
+
debug "Creating cache with key: #{cache_key.inspect} on #{key_method_names.inspect}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def empty?
|
22
|
+
cached_rules.blank?
|
23
|
+
end
|
24
|
+
|
25
|
+
def key_method_names
|
26
|
+
@key_method_names ||= [roles_list_meth, role_groups_list_meth]
|
10
27
|
end
|
11
28
|
|
12
|
-
def
|
13
|
-
|
29
|
+
def cache_key
|
30
|
+
@cache_key ||= :cache
|
14
31
|
end
|
15
32
|
|
16
33
|
def cache_rules!
|
17
|
-
writer.save
|
34
|
+
writer.save(key, reader.prepared_rules) if cached?
|
18
35
|
end
|
19
36
|
|
20
37
|
def cached_rules
|
21
|
-
@rules ||= reader.prepared_rules
|
38
|
+
@rules ||= reader.prepared_rules if cached?
|
22
39
|
end
|
23
40
|
|
24
41
|
def compiler
|
@@ -34,11 +51,11 @@ module CanTango
|
|
34
51
|
end
|
35
52
|
|
36
53
|
def cached_rules?
|
37
|
-
key.same?
|
54
|
+
key.same?(session) && cached?
|
38
55
|
end
|
39
56
|
|
40
57
|
def key
|
41
|
-
@key ||= Key.new ability.user, ability.subject
|
58
|
+
@key ||= Key.new ability.user, ability.subject, key_method_names
|
42
59
|
end
|
43
60
|
|
44
61
|
def rules_cache
|
@@ -47,7 +64,7 @@ module CanTango
|
|
47
64
|
|
48
65
|
def invalidate!
|
49
66
|
raise "no session" if !session
|
50
|
-
rules_cache.invalidate! session[
|
67
|
+
rules_cache.invalidate! session[cache_key]
|
51
68
|
end
|
52
69
|
|
53
70
|
def compile_on?
|
@@ -1,21 +1,12 @@
|
|
1
1
|
module CanTango
|
2
2
|
class Ability
|
3
3
|
module CacheHelpers
|
4
|
+
include CanTango::Helpers::RoleMethods
|
4
5
|
|
5
|
-
|
6
|
-
cache.key.same?(session)
|
7
|
-
end
|
8
|
-
|
9
|
-
def cache_rules!
|
10
|
-
cache.cache_rules!
|
11
|
-
end
|
12
|
-
|
13
|
-
def cached_rules
|
14
|
-
cache.cached_rules
|
15
|
-
end
|
6
|
+
delegate :cache_rules!, :cached_rules, :cached_rules?, :to => :cache
|
16
7
|
|
17
|
-
def cache
|
18
|
-
@cache ||= Cache.new self
|
8
|
+
def cache options = {}
|
9
|
+
@cache ||= CanTango::Ability::Cache.new self, options
|
19
10
|
end
|
20
11
|
end
|
21
12
|
end
|
File without changes
|
@@ -2,7 +2,10 @@ module CanTango
|
|
2
2
|
class Ability
|
3
3
|
module EngineHelpers
|
4
4
|
def execute_engines!
|
5
|
-
each_engine
|
5
|
+
each_engine do |engine|
|
6
|
+
engine_rules = engine.new(self).execute! if engine
|
7
|
+
@rules << engine_rules if !engine_rules.blank?
|
8
|
+
end
|
6
9
|
end
|
7
10
|
|
8
11
|
def each_engine &block
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module CanTango
|
2
|
+
class Ability
|
3
|
+
module Executor
|
4
|
+
include CanTango::Helpers::Debug
|
5
|
+
include CanTango::Ability::CacheHelpers
|
6
|
+
|
7
|
+
delegate :session, :user, :subject, :candidate, :cached?, :to => :ability
|
8
|
+
|
9
|
+
def execute!
|
10
|
+
return if !valid?
|
11
|
+
start_execute
|
12
|
+
return cached_rules if cached? && cached_rules?
|
13
|
+
|
14
|
+
clear_rules!
|
15
|
+
permit_rules
|
16
|
+
|
17
|
+
cache_rules! if cached?
|
18
|
+
end_execute
|
19
|
+
rules
|
20
|
+
end
|
21
|
+
|
22
|
+
def rules
|
23
|
+
@rules ||= []
|
24
|
+
end
|
25
|
+
|
26
|
+
def clear_rules!
|
27
|
+
@rules ||= []
|
28
|
+
end
|
29
|
+
|
30
|
+
def permit_rules
|
31
|
+
raise NotImplementedError
|
32
|
+
end
|
33
|
+
|
34
|
+
def cache
|
35
|
+
@cache ||= CanTango::Ability::Cache.new self, :cache_key => cache_key, :key_method_names => key_method_names
|
36
|
+
end
|
37
|
+
|
38
|
+
def engine_name
|
39
|
+
:permit
|
40
|
+
end
|
41
|
+
|
42
|
+
def valid?
|
43
|
+
raise NotImplementedError
|
44
|
+
end
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
def start_execute
|
49
|
+
debug "executing..."
|
50
|
+
end
|
51
|
+
|
52
|
+
def end_execute
|
53
|
+
debug "DONE"
|
54
|
+
end
|
55
|
+
|
56
|
+
def cache_key
|
57
|
+
raise NotImplementedError
|
58
|
+
end
|
59
|
+
|
60
|
+
def key_method_names
|
61
|
+
[]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
data/lib/cantango/ability.rb
CHANGED
@@ -2,7 +2,7 @@ require 'cantango/permit_engine/util'
|
|
2
2
|
|
3
3
|
module CanTango
|
4
4
|
class Ability
|
5
|
-
autoload_modules :Scope, :Cache
|
5
|
+
autoload_modules :Scope, :Cache, :Executor
|
6
6
|
autoload_modules :MasqueradeHelpers, :PermitHelpers, :PermissionHelpers
|
7
7
|
autoload_modules :UserHelpers, :RoleHelpers, :CacheHelpers, :EngineHelpers
|
8
8
|
|
@@ -6,13 +6,14 @@ module CanTango
|
|
6
6
|
raise "Candidate must be something!" if !candidate
|
7
7
|
@candidate, @options = candidate, options
|
8
8
|
|
9
|
-
return if cached_rules?
|
9
|
+
# return if cached_rules?
|
10
10
|
|
11
11
|
clear_rules!
|
12
12
|
permit_rules
|
13
13
|
|
14
14
|
execute_engines! if engines_on?
|
15
|
-
|
15
|
+
|
16
|
+
# cache_rules!
|
16
17
|
end
|
17
18
|
|
18
19
|
def cached?
|
@@ -1,7 +1,12 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
1
3
|
module CanTango
|
2
4
|
class Configuration
|
3
5
|
class Engines
|
4
6
|
class Engine
|
7
|
+
include Singleton
|
8
|
+
include CanTango::Configuration::Modes
|
9
|
+
|
5
10
|
def set state = :on
|
6
11
|
raise ArgumentError, "Must be :on or :off" unless !state || [:on, :off].include?(state)
|
7
12
|
@state = state || :on
|
@@ -4,9 +4,6 @@ module CanTango
|
|
4
4
|
class Configuration
|
5
5
|
class Engines
|
6
6
|
class Permission < Engine
|
7
|
-
include Singleton
|
8
|
-
include CanTango::Configuration::Modes
|
9
|
-
|
10
7
|
def modes
|
11
8
|
@modes ||= [:cache]
|
12
9
|
end
|
@@ -34,9 +31,13 @@ module CanTango
|
|
34
31
|
|
35
32
|
private
|
36
33
|
|
34
|
+
def valid_mode_names
|
35
|
+
[:cache, :no_cache]
|
36
|
+
end
|
37
|
+
|
37
38
|
def current_config_path
|
38
39
|
@config_path ||= File.join(::Rails.root.to_s, 'config') if rails?
|
39
|
-
@config_path or raise "Define path to config files dir!\
|
40
|
+
@config_path or raise "Define path to config files dir!\nCanTango.config.engine(:permission).config_path(dir_path)"
|
40
41
|
end
|
41
42
|
|
42
43
|
def rails?
|
@@ -4,12 +4,15 @@ module CanTango
|
|
4
4
|
class Configuration
|
5
5
|
class Engines
|
6
6
|
class UserAc < Engine
|
7
|
-
include Singleton
|
8
|
-
include CanTango::Configuration::Modes
|
9
|
-
|
10
7
|
def modes
|
11
8
|
@modes ||= [:no_cache]
|
12
9
|
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def valid_mode_names
|
14
|
+
[:cache, :no_cache]
|
15
|
+
end
|
13
16
|
end
|
14
17
|
end
|
15
18
|
end
|