aegis 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +1 -0
- data/VERSION +1 -1
- data/aegis.gemspec +18 -14
- data/lib/aegis/spec/matchers.rb +63 -0
- data/lib/aegis/spec.rb +3 -85
- data/spec/{action_controller_spec.rb → aegis/action_controller_spec.rb} +2 -2
- data/spec/{has_role_spec.rb → aegis/has_role_spec.rb} +1 -1
- data/spec/{loader_spec.rb → aegis/loader_spec.rb} +1 -1
- data/spec/{permissions_spec.rb → aegis/permissions_spec.rb} +1 -1
- data/spec/{sieve_spec.rb → aegis/sieve_spec.rb} +1 -1
- data/spec/aegis/spec/matchers_spec.rb +55 -0
- metadata +16 -13
data/README.rdoc
CHANGED
@@ -64,6 +64,7 @@ There is an awesome {documentation wiki}[http://wiki.github.com/makandra/aegis/]
|
|
64
64
|
* {Handling denied permissions in your controllers}[http://wiki.github.com/makandra/aegis/handling-denied-permissions-in-your-controllers]
|
65
65
|
* {Changing behavior when a permission is undefined}[http://wiki.github.com/makandra/aegis/changing-behavior-when-a-permission-is-undefined]
|
66
66
|
* {Multiple roles per user}[http://wiki.github.com/makandra/aegis/multiple-roles-per-user]
|
67
|
+
* {Testing permissions}[http://wiki.github.com/makandra/aegis/testing-permissions]
|
67
68
|
* {Upgrading to Aegis 2}[http://wiki.github.com/makandra/aegis/upgrading-to-aegis-2]
|
68
69
|
|
69
70
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.0
|
data/aegis.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{aegis}
|
8
|
-
s.version = "2.
|
8
|
+
s.version = "2.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Henning Koch", "Tobias Kraze"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-09-01}
|
13
13
|
s.description = %q{Aegis is an authorization solution for Ruby on Rails that supports roles and a RESTish, resource-style declaration of permission rules.}
|
14
14
|
s.email = %q{henning.koch@makandra.de}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -34,9 +34,15 @@ Gem::Specification.new do |s|
|
|
34
34
|
"lib/aegis/role.rb",
|
35
35
|
"lib/aegis/sieve.rb",
|
36
36
|
"lib/aegis/spec.rb",
|
37
|
+
"lib/aegis/spec/matchers.rb",
|
37
38
|
"lib/rails/action_controller.rb",
|
38
39
|
"lib/rails/active_record.rb",
|
39
|
-
"spec/action_controller_spec.rb",
|
40
|
+
"spec/aegis/action_controller_spec.rb",
|
41
|
+
"spec/aegis/has_role_spec.rb",
|
42
|
+
"spec/aegis/loader_spec.rb",
|
43
|
+
"spec/aegis/permissions_spec.rb",
|
44
|
+
"spec/aegis/sieve_spec.rb",
|
45
|
+
"spec/aegis/spec/matchers_spec.rb",
|
40
46
|
"spec/app_root/app/controllers/application_controller.rb",
|
41
47
|
"spec/app_root/app/controllers/reviews_controller.rb",
|
42
48
|
"spec/app_root/app/controllers/songs_controller.rb",
|
@@ -60,11 +66,7 @@ Gem::Specification.new do |s|
|
|
60
66
|
"spec/app_root/log/.gitignore",
|
61
67
|
"spec/app_root/script/console",
|
62
68
|
"spec/controllers/reviews_controller_spec.rb",
|
63
|
-
"spec/has_role_spec.rb",
|
64
|
-
"spec/loader_spec.rb",
|
65
|
-
"spec/permissions_spec.rb",
|
66
69
|
"spec/rcov.opts",
|
67
|
-
"spec/sieve_spec.rb",
|
68
70
|
"spec/spec.opts",
|
69
71
|
"spec/spec_helper.rb"
|
70
72
|
]
|
@@ -93,13 +95,14 @@ Gem::Specification.new do |s|
|
|
93
95
|
"spec/app_root/db/migrate/002_create_properties.rb",
|
94
96
|
"spec/app_root/db/migrate/003_create_reviews.rb",
|
95
97
|
"spec/app_root/lib/console_with_fixtures.rb",
|
96
|
-
"spec/action_controller_spec.rb",
|
97
98
|
"spec/controllers/reviews_controller_spec.rb",
|
98
99
|
"spec/spec_helper.rb",
|
99
|
-
"spec/
|
100
|
-
"spec/has_role_spec.rb",
|
101
|
-
"spec/
|
102
|
-
"spec/
|
100
|
+
"spec/aegis/action_controller_spec.rb",
|
101
|
+
"spec/aegis/has_role_spec.rb",
|
102
|
+
"spec/aegis/loader_spec.rb",
|
103
|
+
"spec/aegis/permissions_spec.rb",
|
104
|
+
"spec/aegis/sieve_spec.rb",
|
105
|
+
"spec/aegis/spec/matchers_spec.rb"
|
103
106
|
]
|
104
107
|
|
105
108
|
if s.respond_to? :specification_version then
|
@@ -112,3 +115,4 @@ Gem::Specification.new do |s|
|
|
112
115
|
else
|
113
116
|
end
|
114
117
|
end
|
118
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Aegis
|
2
|
+
module Spec
|
3
|
+
module Matchers
|
4
|
+
|
5
|
+
class CheckPermissions
|
6
|
+
|
7
|
+
def initialize(expected_resource, expected_options = {})
|
8
|
+
@expected_resource = expected_resource
|
9
|
+
@expected_options = expected_options
|
10
|
+
end
|
11
|
+
|
12
|
+
def matches?(controller)
|
13
|
+
@controller_class = controller.class
|
14
|
+
@actual_resource = @controller_class.instance_variable_get('@aegis_permissions_resource')
|
15
|
+
@actual_options = @controller_class.instance_variable_get('@aegis_permissions_options')
|
16
|
+
@actual_resource == @expected_resource && @actual_options == @expected_options
|
17
|
+
end
|
18
|
+
|
19
|
+
def failure_message
|
20
|
+
if @actual_resource != @expected_resource
|
21
|
+
"expected #{@controller_class} to check permissions against resource #{@expected_resource.inspect}, but it checked against #{@actual_resource.inspect}"
|
22
|
+
else
|
23
|
+
"expected #{@controller_class} to check permissions with options #{@expected_options.inspect}, but options were #{@actual_options.inspect}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def negative_failure_message
|
28
|
+
if @actual_resource == @expected_resource
|
29
|
+
"expected #{@controller_class} to not check permissions against resource #{@expected_resource.inspect}"
|
30
|
+
else
|
31
|
+
"expected #{@controller_class} to not check permissions with options #{@expected_options.inspect}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def description
|
36
|
+
description = "check permissions against resource #{@expected_resource.inspect}"
|
37
|
+
description << " with options #{@expected_options.inspect}" if @expected_options.any?
|
38
|
+
description
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
def check_permissions(*args)
|
44
|
+
CheckPermissions.new(*args)
|
45
|
+
end
|
46
|
+
|
47
|
+
def be_allowed_to(*args)
|
48
|
+
simple_matcher do |user, matcher|
|
49
|
+
action, *action_args = args
|
50
|
+
target = action.to_s + (action_args.present? ? " given #{action_args.inspect}" : "")
|
51
|
+
matcher.description = "be allowed to " + target
|
52
|
+
matcher.failure_message = "expected #{user.inspect} to be allowed to #{target}"
|
53
|
+
matcher.negative_failure_message = "expected #{user.inspect} to be denied to #{target}"
|
54
|
+
user.send("may_#{action}?", *action_args)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
ActiveSupport::TestCase.send :include, Aegis::Spec::Matchers
|
63
|
+
|
data/lib/aegis/spec.rb
CHANGED
@@ -1,86 +1,4 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# Support aegis/spec for old code.
|
2
|
+
# Maybe remove this some day.
|
3
|
+
require 'aegis/spec/matchers'
|
3
4
|
|
4
|
-
class CheckPermissions
|
5
|
-
|
6
|
-
def initialize(expected_resource, expected_options = {})
|
7
|
-
@expected_resource = expected_resource
|
8
|
-
@expected_options = expected_options
|
9
|
-
end
|
10
|
-
|
11
|
-
def matches?(controller)
|
12
|
-
@controller_class = controller.class
|
13
|
-
@actual_resource = @controller_class.instance_variable_get('@aegis_permissions_resource')
|
14
|
-
@actual_options = @controller_class.instance_variable_get('@aegis_permissions_options')
|
15
|
-
@actual_resource == @expected_resource && @actual_options == @expected_options
|
16
|
-
end
|
17
|
-
|
18
|
-
def failure_message
|
19
|
-
if @actual_resource != @expected_resource
|
20
|
-
"expected #{@controller_class} to check permissions against resource #{@expected_resource.inspect}, but it checked against #{@actual_resource.inspect}"
|
21
|
-
else
|
22
|
-
"expected #{@controller_class} to check permissions with options #{@expected_options.inspect}, but options were #{@actual_options.inspect}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def negative_failure_message
|
27
|
-
if @actual_resource == @expected_resource
|
28
|
-
"expected #{@controller_class} to not check permissions against resource #{@expected_resource.inspect}"
|
29
|
-
else
|
30
|
-
"expected #{@controller_class} to not check permissions with options #{@expected_options.inspect}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def description
|
35
|
-
description = "check permissions against resource #{@expected_resource.inspect}"
|
36
|
-
description << " with options #{@expected_options.inspect}" if @expected_options.any?
|
37
|
-
description
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def check_permissions(*args)
|
43
|
-
CheckPermissions.new(*args)
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
ActiveSupport::TestCase.send :include, Aegis::Matchers
|
51
|
-
|
52
|
-
#Spec::Rails::Example::ControllerExampleGroup.extend Aegis::ControllerSpecMacros
|
53
|
-
|
54
|
-
|
55
|
-
# def it_should_allow_access_for(*allowed_roles, &block)
|
56
|
-
#
|
57
|
-
# denied_roles = Permissions.roles.collect(&:name) - allowed_roles
|
58
|
-
#
|
59
|
-
# describe 'permissions' do
|
60
|
-
#
|
61
|
-
# before :each do
|
62
|
-
# sign_out
|
63
|
-
# end
|
64
|
-
#
|
65
|
-
# it "should deny access when no user is signed in" do
|
66
|
-
# expect { instance_eval(&block) }.to raise_error(Aegis::AccessDenied)
|
67
|
-
# end
|
68
|
-
#
|
69
|
-
# allowed_roles.each do |role|
|
70
|
-
# it "should allow access for an authenticated #{role}" do
|
71
|
-
# sign_in User.new(:role_name => role)
|
72
|
-
# expect { instance_eval(&block) }.to_not raise_error
|
73
|
-
# response.code.should == '200'
|
74
|
-
# end
|
75
|
-
# end
|
76
|
-
#
|
77
|
-
# denied_roles.each do |role|
|
78
|
-
# it "should deny access for an authenticated #{role}" do
|
79
|
-
# sign_in User.new(:role_name => role)
|
80
|
-
# expect { instance_eval(&block) }.to raise_error(Aegis::AccessDenied)
|
81
|
-
# end
|
82
|
-
# end
|
83
|
-
#
|
84
|
-
# end
|
85
|
-
#
|
86
|
-
# end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Aegis::Spec::Matchers do
|
4
|
+
|
5
|
+
describe 'be_allowed_to' do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
|
9
|
+
permissions = @permissions = Class.new(Aegis::Permissions) do
|
10
|
+
role :user
|
11
|
+
resources :files do
|
12
|
+
allow :user do
|
13
|
+
object == 'allowed-file'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
@user_class = Class.new(ActiveRecord::Base) do
|
19
|
+
set_table_name 'users'
|
20
|
+
has_role :permissions => permissions
|
21
|
+
end
|
22
|
+
|
23
|
+
@user = @user_class.new(:role_name => 'user')
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should match the positive case' do
|
28
|
+
@user.should be_allowed_to(:update_file, 'allowed-file')
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should match the negative case' do
|
32
|
+
@user.should_not be_allowed_to(:update_file, 'denied-file')
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'check_permissions' do
|
38
|
+
|
39
|
+
before(:each) do
|
40
|
+
@controller = Class.new(ActionController::Base) do
|
41
|
+
permissions :post
|
42
|
+
end.new
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should match the positive case' do
|
46
|
+
@controller.should check_permissions(:post)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should match the negative case' do
|
50
|
+
@controller.should_not check_permissions(:reviews)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 2
|
7
|
-
-
|
7
|
+
- 3
|
8
8
|
- 0
|
9
|
-
version: 2.
|
9
|
+
version: 2.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Henning Koch
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-01 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -46,9 +46,15 @@ files:
|
|
46
46
|
- lib/aegis/role.rb
|
47
47
|
- lib/aegis/sieve.rb
|
48
48
|
- lib/aegis/spec.rb
|
49
|
+
- lib/aegis/spec/matchers.rb
|
49
50
|
- lib/rails/action_controller.rb
|
50
51
|
- lib/rails/active_record.rb
|
51
|
-
- spec/action_controller_spec.rb
|
52
|
+
- spec/aegis/action_controller_spec.rb
|
53
|
+
- spec/aegis/has_role_spec.rb
|
54
|
+
- spec/aegis/loader_spec.rb
|
55
|
+
- spec/aegis/permissions_spec.rb
|
56
|
+
- spec/aegis/sieve_spec.rb
|
57
|
+
- spec/aegis/spec/matchers_spec.rb
|
52
58
|
- spec/app_root/app/controllers/application_controller.rb
|
53
59
|
- spec/app_root/app/controllers/reviews_controller.rb
|
54
60
|
- spec/app_root/app/controllers/songs_controller.rb
|
@@ -72,11 +78,7 @@ files:
|
|
72
78
|
- spec/app_root/log/.gitignore
|
73
79
|
- spec/app_root/script/console
|
74
80
|
- spec/controllers/reviews_controller_spec.rb
|
75
|
-
- spec/has_role_spec.rb
|
76
|
-
- spec/loader_spec.rb
|
77
|
-
- spec/permissions_spec.rb
|
78
81
|
- spec/rcov.opts
|
79
|
-
- spec/sieve_spec.rb
|
80
82
|
- spec/spec.opts
|
81
83
|
- spec/spec_helper.rb
|
82
84
|
has_rdoc: true
|
@@ -129,10 +131,11 @@ test_files:
|
|
129
131
|
- spec/app_root/db/migrate/002_create_properties.rb
|
130
132
|
- spec/app_root/db/migrate/003_create_reviews.rb
|
131
133
|
- spec/app_root/lib/console_with_fixtures.rb
|
132
|
-
- spec/action_controller_spec.rb
|
133
134
|
- spec/controllers/reviews_controller_spec.rb
|
134
135
|
- spec/spec_helper.rb
|
135
|
-
- spec/
|
136
|
-
- spec/has_role_spec.rb
|
137
|
-
- spec/
|
138
|
-
- spec/
|
136
|
+
- spec/aegis/action_controller_spec.rb
|
137
|
+
- spec/aegis/has_role_spec.rb
|
138
|
+
- spec/aegis/loader_spec.rb
|
139
|
+
- spec/aegis/permissions_spec.rb
|
140
|
+
- spec/aegis/sieve_spec.rb
|
141
|
+
- spec/aegis/spec/matchers_spec.rb
|