be9-acl9 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.textile +4 -0
- data/README.textile +24 -0
- data/Rakefile +13 -21
- data/VERSION.yml +4 -0
- data/lib/acl9/controller_extensions/dsl_base.rb +41 -28
- data/lib/acl9/controller_extensions/generators.rb +4 -0
- data/spec/controllers.rb +16 -3
- data/spec/dsl_base_spec.rb +70 -19
- metadata +24 -41
- data/Manifest +0 -26
- data/acl9.gemspec +0 -37
- data/init.rb +0 -1
- data/lib/acl9/version.rb +0 -54
data/CHANGELOG.textile
CHANGED
data/README.textile
CHANGED
@@ -538,6 +538,30 @@ below). You can also use @:only@ and @:except@ options in the
|
|
538
538
|
@access_control@ call which will serve as options of the @before_filter@ and thus
|
539
539
|
limit the scope of the whole ACL.
|
540
540
|
|
541
|
+
h3. Rule conditions
|
542
|
+
|
543
|
+
You may create conditional rules using @:if@ and @:unless@ options.
|
544
|
+
|
545
|
+
<pre><code>
|
546
|
+
allow :owner, :of => :site, :to => [:delete, :destroy], :if => :chance_to_delete
|
547
|
+
</code></pre>
|
548
|
+
|
549
|
+
Controller's @:chance_to_delete@ method will be called here. The rule will match if the action
|
550
|
+
is 'delete' or 'destroy' AND if the method returned @true@.
|
551
|
+
|
552
|
+
@:unless@ has the opposite meaning and should return @false@ for a rule to match.
|
553
|
+
|
554
|
+
Both options can be specified in the same rule.
|
555
|
+
|
556
|
+
<pre><code>
|
557
|
+
allow :visitor, :to => [:index, :show], :if => :right_phase_of_the_moon?, :unless => :suspicious?
|
558
|
+
</code></pre>
|
559
|
+
|
560
|
+
@right_phase_of_the_moon?@ should return @true@ AND @suspicious?@ should return @false@ for a poor visitor to
|
561
|
+
see a page.
|
562
|
+
|
563
|
+
Currently only controller methods are supported (specify them as :symbols). Lambdas are *not* supported.
|
564
|
+
|
541
565
|
h2. Rule matching order
|
542
566
|
|
543
567
|
Rule matching system is similar to that of Apache web server. There are two modes: _default allow_
|
data/Rakefile
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require File.join(File.dirname(__FILE__), 'lib', 'acl9', 'version')
|
3
2
|
require 'rake'
|
4
3
|
require 'spec/rake/spectask'
|
5
4
|
|
@@ -7,21 +6,20 @@ desc 'Default: run specs.'
|
|
7
6
|
task :default => :spec
|
8
7
|
|
9
8
|
begin
|
10
|
-
require '
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
9
|
+
require 'jeweler'
|
10
|
+
Jeweler::Tasks.new do |s|
|
11
|
+
s.name = "acl9"
|
12
|
+
s.summary = "Yet another role-based authorization system for Rails with a nice DSL for access control lists."
|
13
|
+
s.email = "olegdashevskii@gmail.com"
|
14
|
+
s.homepage = "http://github.com/be9/acl9"
|
15
|
+
s.description = "Yet another role-based authorization system for Rails with a nice DSL for access control lists."
|
16
|
+
s.authors = ["oleg dashevskii"]
|
17
|
+
s.files = FileList["[A-Z]*", "{lib,spec}/**/*.rb"]
|
18
|
+
s.add_development_dependency "rspec", ">= 1.1.12"
|
19
|
+
s.add_development_dependency "rspec-rails", ">= 1.1.12"
|
21
20
|
end
|
22
|
-
rescue LoadError
|
23
|
-
puts "
|
24
|
-
puts "#{boom.to_s.capitalize}."
|
21
|
+
rescue LoadError
|
22
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
25
23
|
end
|
26
24
|
|
27
25
|
desc 'Run the specs'
|
@@ -29,9 +27,3 @@ Spec::Rake::SpecTask.new(:spec) do |t|
|
|
29
27
|
t.spec_opts = ['--colour --format progress --loadby mtime --reverse']
|
30
28
|
t.spec_files = FileList['spec/**/*_spec.rb']
|
31
29
|
end
|
32
|
-
|
33
|
-
desc 'Regenerate the .gemspec'
|
34
|
-
task :gemspec => :package do
|
35
|
-
gemspec = Dir["pkg/**/*.gemspec"].first
|
36
|
-
FileUtils.cp gemspec, "."
|
37
|
-
end
|
data/VERSION.yml
ADDED
@@ -2,7 +2,7 @@ module Acl9
|
|
2
2
|
module Dsl
|
3
3
|
class Base
|
4
4
|
attr_reader :allows, :denys
|
5
|
-
|
5
|
+
|
6
6
|
def initialize(*args)
|
7
7
|
@default_action = nil
|
8
8
|
|
@@ -11,15 +11,15 @@ module Acl9
|
|
11
11
|
|
12
12
|
@original_args = args
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def acl_block!(&acl_block)
|
16
|
-
|
16
|
+
instance_eval(&acl_block)
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def default_action
|
20
|
-
@default_action.nil?
|
20
|
+
if @default_action.nil? then :deny else @default_action end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def allowance_expression
|
24
24
|
allowed_expr = if @allows.size > 0
|
25
25
|
@allows.map { |clause| "(#{clause})" }.join(' || ')
|
@@ -56,24 +56,24 @@ module Acl9
|
|
56
56
|
@current_rule = :allow
|
57
57
|
_parse_and_add_rule(*args)
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def deny(*args)
|
61
61
|
@current_rule = :deny
|
62
62
|
_parse_and_add_rule(*args)
|
63
63
|
end
|
64
64
|
|
65
65
|
def actions(*args, &block)
|
66
|
-
raise ArgumentError, "actions should receive at least 1 action as argument" if args.size < 1
|
67
|
-
|
66
|
+
raise ArgumentError, "actions should receive at least 1 action as argument" if args.size < 1
|
67
|
+
|
68
68
|
subsidiary = self.class.new(*@original_args)
|
69
69
|
|
70
70
|
class <<subsidiary
|
71
71
|
def actions(*args)
|
72
|
-
raise ArgumentError, "You cannot use actions inside another actions block"
|
72
|
+
raise ArgumentError, "You cannot use actions inside another actions block"
|
73
73
|
end
|
74
74
|
|
75
75
|
def default(*args)
|
76
|
-
raise ArgumentError, "You cannot use default inside an actions block"
|
76
|
+
raise ArgumentError, "You cannot use default inside an actions block"
|
77
77
|
end
|
78
78
|
|
79
79
|
def _set_action_clause(to, except)
|
@@ -84,7 +84,7 @@ module Acl9
|
|
84
84
|
subsidiary.acl_block!(&block)
|
85
85
|
|
86
86
|
action_check = _action_check_expression(args)
|
87
|
-
|
87
|
+
|
88
88
|
squash = lambda do |rules|
|
89
89
|
_either_of(rules) + ' && ' + action_check
|
90
90
|
end
|
@@ -98,18 +98,14 @@ module Acl9
|
|
98
98
|
def anonymous; nil end
|
99
99
|
def all; true end
|
100
100
|
def logged_in; false end
|
101
|
-
|
101
|
+
|
102
102
|
def _parse_and_add_rule(*args)
|
103
|
-
options =
|
104
|
-
args.pop
|
105
|
-
else
|
106
|
-
{}
|
107
|
-
end
|
103
|
+
options = args.extract_options!
|
108
104
|
|
109
105
|
_set_action_clause(options.delete(:to), options.delete(:except))
|
110
106
|
|
111
107
|
object = _role_object(options)
|
112
|
-
|
108
|
+
|
113
109
|
role_checks = args.map do |who|
|
114
110
|
case who
|
115
111
|
when nil then "#{_subject_ref}.nil?" # anonymous
|
@@ -120,23 +116,36 @@ module Acl9
|
|
120
116
|
end
|
121
117
|
end
|
122
118
|
|
123
|
-
|
119
|
+
[:if, :unless].each do |cond|
|
120
|
+
val = options[cond]
|
121
|
+
raise ArgumentError, "#{cond} option must be a Symbol" if val && !val.is_a?(Symbol)
|
122
|
+
end
|
123
|
+
|
124
|
+
condition = [
|
125
|
+
(_method_ref(options[:if]) if options[:if]),
|
126
|
+
("!#{_method_ref(options[:unless])}" if options[:unless])
|
127
|
+
].compact.join(' && ')
|
128
|
+
|
129
|
+
condition = nil if condition.blank?
|
130
|
+
|
131
|
+
_add_rule(case role_checks.size
|
124
132
|
when 0
|
125
133
|
raise ArgumentError, "allow/deny should have at least 1 argument"
|
126
134
|
when 1 then role_checks.first
|
127
135
|
else
|
128
136
|
_either_of(role_checks)
|
129
|
-
end
|
137
|
+
end, condition)
|
130
138
|
end
|
131
139
|
|
132
140
|
def _either_of(exprs)
|
133
141
|
exprs.map { |expr| "(#{expr})" }.join(' || ')
|
134
142
|
end
|
135
143
|
|
136
|
-
def _add_rule(what)
|
137
|
-
|
144
|
+
def _add_rule(what, condition)
|
145
|
+
anded = [what] + [@action_clause, condition].compact
|
146
|
+
anded[0] = "(#{anded[0]})" if anded.size > 1
|
138
147
|
|
139
|
-
(@current_rule == :allow ? @allows : @denys) <<
|
148
|
+
(@current_rule == :allow ? @allows : @denys) << anded.join(' && ')
|
140
149
|
end
|
141
150
|
|
142
151
|
def _set_action_clause(to, except)
|
@@ -148,14 +157,14 @@ module Acl9
|
|
148
157
|
return unless action_list
|
149
158
|
|
150
159
|
expr = _action_check_expression(action_list)
|
151
|
-
|
160
|
+
|
152
161
|
@action_clause = if to
|
153
162
|
"#{expr}"
|
154
163
|
else
|
155
164
|
"!#{expr}"
|
156
165
|
end
|
157
166
|
end
|
158
|
-
|
167
|
+
|
159
168
|
def _action_check_expression(action_list)
|
160
169
|
unless action_list.is_a?(Array)
|
161
170
|
action_list = [ action_list.to_s ]
|
@@ -167,7 +176,7 @@ module Acl9
|
|
167
176
|
else
|
168
177
|
set_of_actions = "Set.new([" + action_list.map { |act| "'#{act}'"}.join(',') + "])"
|
169
178
|
|
170
|
-
"#{set_of_actions}.include?(#{_action_ref})"
|
179
|
+
"#{set_of_actions}.include?(#{_action_ref})"
|
171
180
|
end
|
172
181
|
end
|
173
182
|
|
@@ -194,7 +203,7 @@ module Acl9
|
|
194
203
|
else
|
195
204
|
raise ArgumentError, "object specified by preposition can only be a Class or a Symbol"
|
196
205
|
end
|
197
|
-
end
|
206
|
+
end
|
198
207
|
|
199
208
|
def _subject_ref
|
200
209
|
raise
|
@@ -207,6 +216,10 @@ module Acl9
|
|
207
216
|
def _action_ref
|
208
217
|
raise
|
209
218
|
end
|
219
|
+
|
220
|
+
def _method_ref(method)
|
221
|
+
raise
|
222
|
+
end
|
210
223
|
end
|
211
224
|
end
|
212
225
|
end
|
data/spec/controllers.rb
CHANGED
@@ -21,6 +21,13 @@ class EmptyController < ApplicationController
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
module TrueFalse
|
25
|
+
private
|
26
|
+
|
27
|
+
def true_meth; true end
|
28
|
+
def false_meth; false end
|
29
|
+
end
|
30
|
+
|
24
31
|
# all these controllers behave the same way
|
25
32
|
|
26
33
|
class ACLBlock < EmptyController
|
@@ -46,14 +53,18 @@ end
|
|
46
53
|
|
47
54
|
class ACLArguments < EmptyController
|
48
55
|
access_control :except => [:index, :show] do
|
49
|
-
allow :admin
|
56
|
+
allow :admin, :if => :true_meth, :unless => :false_meth
|
50
57
|
end
|
58
|
+
|
59
|
+
include TrueFalse
|
51
60
|
end
|
52
61
|
|
53
62
|
class ACLBooleanMethod < EmptyController
|
54
63
|
access_control :acl, :filter => false do
|
55
|
-
allow all, :to => [:index, :show]
|
56
|
-
allow :admin
|
64
|
+
allow all, :to => [:index, :show], :if => :true_meth
|
65
|
+
allow :admin, :unless => :false_meth
|
66
|
+
allow all, :if => :false_meth
|
67
|
+
allow all, :unless => :true_meth
|
57
68
|
end
|
58
69
|
|
59
70
|
before_filter :check_acl
|
@@ -65,6 +76,8 @@ class ACLBooleanMethod < EmptyController
|
|
65
76
|
raise Acl9::AccessDenied
|
66
77
|
end
|
67
78
|
end
|
79
|
+
|
80
|
+
include TrueFalse
|
68
81
|
end
|
69
82
|
|
70
83
|
###########################################
|
data/spec/dsl_base_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'ostruct'
|
1
2
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
3
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'acl9', 'controller_extensions', 'dsl_base')
|
3
4
|
|
@@ -54,6 +55,7 @@ class DslTester < Acl9::Dsl::Base
|
|
54
55
|
@_subject = subject
|
55
56
|
@_current_action = (args[0] || 'index').to_s
|
56
57
|
@_objects = args.last.is_a?(Hash) ? args.last : {}
|
58
|
+
@_callable = @_objects.delete(:call)
|
57
59
|
|
58
60
|
instance_eval(allowance_expression)
|
59
61
|
end
|
@@ -63,17 +65,21 @@ class DslTester < Acl9::Dsl::Base
|
|
63
65
|
end
|
64
66
|
|
65
67
|
def _object_ref(object)
|
66
|
-
"@_objects[:#{object
|
68
|
+
"@_objects[:#{object}]"
|
67
69
|
end
|
68
70
|
|
69
71
|
def _action_ref
|
70
72
|
"@_current_action"
|
71
73
|
end
|
74
|
+
|
75
|
+
def _method_ref(method)
|
76
|
+
"@_callable.send(:#{method})"
|
77
|
+
end
|
72
78
|
end
|
73
79
|
|
74
80
|
describe Acl9::Dsl::Base do
|
75
|
-
class
|
76
|
-
class
|
81
|
+
class ThatFoo; end
|
82
|
+
class ThatBar; end
|
77
83
|
|
78
84
|
def arg_err(&block)
|
79
85
|
lambda do
|
@@ -97,9 +103,9 @@ describe Acl9::Dsl::Base do
|
|
97
103
|
@user = FakeUser.new
|
98
104
|
@user2 = FakeUser.new
|
99
105
|
@user3 = FakeUser.new
|
100
|
-
@foo =
|
101
|
-
@foo2 =
|
102
|
-
@foo3 =
|
106
|
+
@foo = ThatFoo.new
|
107
|
+
@foo2 = ThatFoo.new
|
108
|
+
@foo3 = ThatFoo.new
|
103
109
|
end
|
104
110
|
|
105
111
|
describe "default" do
|
@@ -368,7 +374,7 @@ describe Acl9::Dsl::Base do
|
|
368
374
|
end.
|
369
375
|
permit(@user, :foo => @foo).
|
370
376
|
forbid(@user, :foo => @foo2).
|
371
|
-
forbid(@user, :foo =>
|
377
|
+
forbid(@user, :foo => ThatFoo).
|
372
378
|
forbid(nil, :foo => @foo).
|
373
379
|
forbid(@user2, :foo => @foo)
|
374
380
|
end
|
@@ -381,10 +387,10 @@ describe Acl9::Dsl::Base do
|
|
381
387
|
end
|
382
388
|
|
383
389
|
it "#allow with a class role should verify this role against a class" do
|
384
|
-
@user << [:owner,
|
390
|
+
@user << [:owner, ThatFoo]
|
385
391
|
|
386
392
|
acl do
|
387
|
-
allow :owner, :of =>
|
393
|
+
allow :owner, :of => ThatFoo
|
388
394
|
end.permit(@user).forbid(nil).forbid(@user2)
|
389
395
|
end
|
390
396
|
|
@@ -398,7 +404,7 @@ describe Acl9::Dsl::Base do
|
|
398
404
|
end.
|
399
405
|
forbid(@user, :foo => @foo).
|
400
406
|
permit(@user, :foo => @foo2).
|
401
|
-
permit(@user, :foo =>
|
407
|
+
permit(@user, :foo => ThatFoo).
|
402
408
|
permit(nil, :foo => @foo).
|
403
409
|
permit(@user2, :foo => @foo)
|
404
410
|
end
|
@@ -411,11 +417,11 @@ describe Acl9::Dsl::Base do
|
|
411
417
|
end
|
412
418
|
|
413
419
|
it "#deny with a class role should verify this role against a class" do
|
414
|
-
@user << [:ignorant,
|
420
|
+
@user << [:ignorant, ThatFoo]
|
415
421
|
|
416
422
|
acl do
|
417
423
|
default :allow
|
418
|
-
deny :ignorant, :of =>
|
424
|
+
deny :ignorant, :of => ThatFoo
|
419
425
|
end.forbid(@user).permit(nil).permit(@user2)
|
420
426
|
end
|
421
427
|
|
@@ -477,6 +483,51 @@ describe Acl9::Dsl::Base do
|
|
477
483
|
end
|
478
484
|
end
|
479
485
|
|
486
|
+
describe "conditions" do
|
487
|
+
[:if, :unless].each do |cond|
|
488
|
+
it "should raise ArgumentError when #{cond} is not a Symbol" do
|
489
|
+
arg_err do
|
490
|
+
allow nil, cond => 123
|
491
|
+
end
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|
495
|
+
it "allow ... :if" do
|
496
|
+
acl do
|
497
|
+
allow nil, :if => :meth
|
498
|
+
end.
|
499
|
+
permit(nil, :call => OpenStruct.new(:meth => true)).
|
500
|
+
forbid(nil, :call => OpenStruct.new(:meth => false))
|
501
|
+
end
|
502
|
+
|
503
|
+
it "allow ... :unless" do
|
504
|
+
acl do
|
505
|
+
allow nil, :unless => :meth
|
506
|
+
end.
|
507
|
+
permit(nil, :call => OpenStruct.new(:meth => false)).
|
508
|
+
forbid(nil, :call => OpenStruct.new(:meth => true))
|
509
|
+
end
|
510
|
+
|
511
|
+
it "deny ... :if" do
|
512
|
+
acl do
|
513
|
+
default :allow
|
514
|
+
deny nil, :if => :meth
|
515
|
+
end.
|
516
|
+
permit(nil, :call => OpenStruct.new(:meth => false)).
|
517
|
+
forbid(nil, :call => OpenStruct.new(:meth => true))
|
518
|
+
end
|
519
|
+
|
520
|
+
it "deny ... :unless" do
|
521
|
+
acl do
|
522
|
+
default :allow
|
523
|
+
deny nil, :unless => :meth
|
524
|
+
end.
|
525
|
+
permit(nil, :call => OpenStruct.new(:meth => true)).
|
526
|
+
forbid(nil, :call => OpenStruct.new(:meth => false))
|
527
|
+
end
|
528
|
+
|
529
|
+
end
|
530
|
+
|
480
531
|
describe "several roles as arguments" do
|
481
532
|
it "#allow should be able to receive a role list (global roles)" do
|
482
533
|
@user << :bzz
|
@@ -504,12 +555,12 @@ describe Acl9::Dsl::Base do
|
|
504
555
|
end
|
505
556
|
|
506
557
|
it "#allow should be able to receive a role list (class roles)" do
|
507
|
-
@user << [:frooble,
|
508
|
-
@user2 << [:oombigle,
|
558
|
+
@user << [:frooble, ThatFoo]
|
559
|
+
@user2 << [:oombigle, ThatFoo]
|
509
560
|
@user3 << :frooble
|
510
561
|
|
511
562
|
acl do
|
512
|
-
allow :frooble, :oombigle, :by =>
|
563
|
+
allow :frooble, :oombigle, :by => ThatFoo
|
513
564
|
end.
|
514
565
|
permit(@user).
|
515
566
|
permit(@user2).
|
@@ -546,13 +597,13 @@ describe Acl9::Dsl::Base do
|
|
546
597
|
end
|
547
598
|
|
548
599
|
it "#deny should be able to receive a role list (class roles)" do
|
549
|
-
@user << [:frooble,
|
550
|
-
@user2 << [:oombigle,
|
600
|
+
@user << [:frooble, ThatFoo]
|
601
|
+
@user2 << [:oombigle, ThatFoo]
|
551
602
|
@user3 << :frooble
|
552
603
|
|
553
604
|
acl do
|
554
605
|
default :allow
|
555
|
-
deny :frooble, :oombigle, :by =>
|
606
|
+
deny :frooble, :oombigle, :by => ThatFoo
|
556
607
|
end.
|
557
608
|
forbid(@user).
|
558
609
|
forbid(@user2).
|
@@ -670,7 +721,7 @@ describe Acl9::Dsl::Base do
|
|
670
721
|
end
|
671
722
|
|
672
723
|
it "#allow and #deny should work together inside actions block" do
|
673
|
-
@foo =
|
724
|
+
@foo = ThatFoo.new
|
674
725
|
@user << [:owner, @foo]
|
675
726
|
@user2 << :hacker
|
676
727
|
@user2 << :the_destroyer
|
metadata
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: be9-acl9
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- oleg dashevskii
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-02-
|
12
|
+
date: 2009-02-27 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
17
|
+
type: :development
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
@@ -23,6 +24,7 @@ dependencies:
|
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: rspec-rails
|
27
|
+
type: :development
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
@@ -36,57 +38,38 @@ executables: []
|
|
36
38
|
|
37
39
|
extensions: []
|
38
40
|
|
39
|
-
extra_rdoc_files:
|
40
|
-
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- CHANGELOG.textile
|
45
|
+
- MIT-LICENSE
|
46
|
+
- Rakefile
|
47
|
+
- README.textile
|
48
|
+
- TODO
|
49
|
+
- VERSION.yml
|
41
50
|
- lib/acl9/config.rb
|
42
|
-
- lib/acl9/model_extensions/subject.rb
|
43
|
-
- lib/acl9/model_extensions/object.rb
|
44
|
-
- lib/acl9/controller_extensions.rb
|
45
|
-
- lib/acl9/controller_extensions/generators.rb
|
46
51
|
- lib/acl9/controller_extensions/dsl_base.rb
|
47
|
-
- lib/acl9/
|
48
|
-
- lib/acl9/
|
49
|
-
- lib/acl9.rb
|
50
|
-
- TODO
|
51
|
-
- README.textile
|
52
|
-
- CHANGELOG.textile
|
53
|
-
files:
|
52
|
+
- lib/acl9/controller_extensions/generators.rb
|
53
|
+
- lib/acl9/controller_extensions.rb
|
54
54
|
- lib/acl9/helpers.rb
|
55
|
-
- lib/acl9/config.rb
|
56
|
-
- lib/acl9/model_extensions/subject.rb
|
57
55
|
- lib/acl9/model_extensions/object.rb
|
58
|
-
- lib/acl9/
|
59
|
-
- lib/acl9/controller_extensions/generators.rb
|
60
|
-
- lib/acl9/controller_extensions/dsl_base.rb
|
61
|
-
- lib/acl9/version.rb
|
56
|
+
- lib/acl9/model_extensions/subject.rb
|
62
57
|
- lib/acl9/model_extensions.rb
|
63
58
|
- lib/acl9.rb
|
64
|
-
-
|
59
|
+
- spec/access_control_spec.rb
|
60
|
+
- spec/controllers.rb
|
65
61
|
- spec/db/schema.rb
|
62
|
+
- spec/dsl_base_spec.rb
|
66
63
|
- spec/helpers_spec.rb
|
67
|
-
- spec/spec_helper.rb
|
68
64
|
- spec/models.rb
|
69
|
-
- spec/dsl_base_spec.rb
|
70
|
-
- spec/access_control_spec.rb
|
71
|
-
- spec/controllers.rb
|
72
65
|
- spec/roles_spec.rb
|
73
|
-
-
|
74
|
-
- Manifest
|
75
|
-
- MIT-LICENSE
|
76
|
-
- Rakefile
|
77
|
-
- README.textile
|
78
|
-
- init.rb
|
79
|
-
- CHANGELOG.textile
|
66
|
+
- spec/spec_helper.rb
|
80
67
|
has_rdoc: true
|
81
68
|
homepage: http://github.com/be9/acl9
|
82
69
|
post_install_message:
|
83
70
|
rdoc_options:
|
84
|
-
- --line-numbers
|
85
71
|
- --inline-source
|
86
|
-
- --
|
87
|
-
- Acl9
|
88
|
-
- --main
|
89
|
-
- README.textile
|
72
|
+
- --charset=UTF-8
|
90
73
|
require_paths:
|
91
74
|
- lib
|
92
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -99,11 +82,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
82
|
requirements:
|
100
83
|
- - ">="
|
101
84
|
- !ruby/object:Gem::Version
|
102
|
-
version: "
|
85
|
+
version: "0"
|
103
86
|
version:
|
104
87
|
requirements: []
|
105
88
|
|
106
|
-
rubyforge_project:
|
89
|
+
rubyforge_project:
|
107
90
|
rubygems_version: 1.2.0
|
108
91
|
signing_key:
|
109
92
|
specification_version: 2
|
data/Manifest
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
lib/acl9/helpers.rb
|
2
|
-
lib/acl9/config.rb
|
3
|
-
lib/acl9/model_extensions/subject.rb
|
4
|
-
lib/acl9/model_extensions/object.rb
|
5
|
-
lib/acl9/controller_extensions.rb
|
6
|
-
lib/acl9/controller_extensions/generators.rb
|
7
|
-
lib/acl9/controller_extensions/dsl_base.rb
|
8
|
-
lib/acl9/version.rb
|
9
|
-
lib/acl9/model_extensions.rb
|
10
|
-
lib/acl9.rb
|
11
|
-
TODO
|
12
|
-
spec/db/schema.rb
|
13
|
-
spec/helpers_spec.rb
|
14
|
-
spec/spec_helper.rb
|
15
|
-
spec/models.rb
|
16
|
-
spec/dsl_base_spec.rb
|
17
|
-
spec/access_control_spec.rb
|
18
|
-
spec/controllers.rb
|
19
|
-
spec/roles_spec.rb
|
20
|
-
acl9.gemspec
|
21
|
-
Manifest
|
22
|
-
MIT-LICENSE
|
23
|
-
Rakefile
|
24
|
-
README.textile
|
25
|
-
init.rb
|
26
|
-
CHANGELOG.textile
|
data/acl9.gemspec
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = %q{acl9}
|
5
|
-
s.version = "0.9.3"
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Oleg Dashevskii"]
|
9
|
-
s.date = %q{2009-02-04}
|
10
|
-
s.description = %q{Yet another role-based authorization system for Rails with a nice DSL for access control lists.}
|
11
|
-
s.email = %q{olegdashevskii@gmail.com}
|
12
|
-
s.extra_rdoc_files = ["lib/acl9/helpers.rb", "lib/acl9/config.rb", "lib/acl9/model_extensions/subject.rb", "lib/acl9/model_extensions/object.rb", "lib/acl9/controller_extensions.rb", "lib/acl9/controller_extensions/generators.rb", "lib/acl9/controller_extensions/dsl_base.rb", "lib/acl9/version.rb", "lib/acl9/model_extensions.rb", "lib/acl9.rb", "TODO", "README.textile", "CHANGELOG.textile"]
|
13
|
-
s.files = ["lib/acl9/helpers.rb", "lib/acl9/config.rb", "lib/acl9/model_extensions/subject.rb", "lib/acl9/model_extensions/object.rb", "lib/acl9/controller_extensions.rb", "lib/acl9/controller_extensions/generators.rb", "lib/acl9/controller_extensions/dsl_base.rb", "lib/acl9/version.rb", "lib/acl9/model_extensions.rb", "lib/acl9.rb", "TODO", "spec/db/schema.rb", "spec/helpers_spec.rb", "spec/spec_helper.rb", "spec/models.rb", "spec/dsl_base_spec.rb", "spec/access_control_spec.rb", "spec/controllers.rb", "spec/roles_spec.rb", "acl9.gemspec", "Manifest", "MIT-LICENSE", "Rakefile", "README.textile", "init.rb", "CHANGELOG.textile"]
|
14
|
-
s.has_rdoc = true
|
15
|
-
s.homepage = %q{http://github.com/be9/acl9}
|
16
|
-
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Acl9", "--main", "README.textile"]
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
s.rubyforge_project = %q{acl9}
|
19
|
-
s.rubygems_version = %q{1.3.1}
|
20
|
-
s.summary = %q{Yet another role-based authorization system for Rails with a nice DSL for access control lists.}
|
21
|
-
|
22
|
-
if s.respond_to? :specification_version then
|
23
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
-
s.specification_version = 2
|
25
|
-
|
26
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
-
s.add_development_dependency(%q<rspec>, [">= 1.1.12"])
|
28
|
-
s.add_development_dependency(%q<rspec-rails>, [">= 1.1.12"])
|
29
|
-
else
|
30
|
-
s.add_dependency(%q<rspec>, [">= 1.1.12"])
|
31
|
-
s.add_dependency(%q<rspec-rails>, [">= 1.1.12"])
|
32
|
-
end
|
33
|
-
else
|
34
|
-
s.add_dependency(%q<rspec>, [">= 1.1.12"])
|
35
|
-
s.add_dependency(%q<rspec-rails>, [">= 1.1.12"])
|
36
|
-
end
|
37
|
-
end
|
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'acl9'
|
data/lib/acl9/version.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
module Acl9 # :nodoc:
|
2
|
-
# = Version
|
3
|
-
#
|
4
|
-
# A class for describing the current version of a library. The version
|
5
|
-
# consists of three parts: the +major+ number, the +minor+ number, and the
|
6
|
-
# +tiny+ (or +patch+) number.
|
7
|
-
class Version
|
8
|
-
|
9
|
-
include Comparable
|
10
|
-
|
11
|
-
# A convenience method for instantiating a new Version instance with the
|
12
|
-
# given +major+, +minor+, and +tiny+ components.
|
13
|
-
def self.[](major, minor, tiny)
|
14
|
-
new(major, minor, tiny)
|
15
|
-
end
|
16
|
-
|
17
|
-
attr_reader :major, :minor, :tiny
|
18
|
-
|
19
|
-
# Create a new Version object with the given components.
|
20
|
-
def initialize(major, minor, tiny)
|
21
|
-
@major, @minor, @tiny = major, minor, tiny
|
22
|
-
end
|
23
|
-
|
24
|
-
# Compare this version to the given +version+ object.
|
25
|
-
def <=>(version)
|
26
|
-
to_i <=> version.to_i
|
27
|
-
end
|
28
|
-
|
29
|
-
# Converts this version object to a string, where each of the three
|
30
|
-
# version components are joined by the '.' character. E.g., 2.0.0.
|
31
|
-
def to_s
|
32
|
-
@to_s ||= [@major, @minor, @tiny].join(".")
|
33
|
-
end
|
34
|
-
|
35
|
-
# Converts this version to a canonical integer that may be compared
|
36
|
-
# against other version objects.
|
37
|
-
def to_i
|
38
|
-
@to_i ||= @major * 1_000_000 + @minor * 1_000 + @tiny
|
39
|
-
end
|
40
|
-
|
41
|
-
def to_a
|
42
|
-
[@major, @minor, @tiny]
|
43
|
-
end
|
44
|
-
|
45
|
-
MAJOR = 0
|
46
|
-
MINOR = 9
|
47
|
-
TINY = 3
|
48
|
-
|
49
|
-
# The current version as a Version instance
|
50
|
-
CURRENT = new(MAJOR, MINOR, TINY)
|
51
|
-
# The current version as a String
|
52
|
-
STRING = CURRENT.to_s
|
53
|
-
end
|
54
|
-
end
|