walruz 0.0.12 → 0.0.13

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/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ * 0.0.13 (Jul 21, 2011)
2
+ * Adding a new method to the Walruz::Manager class: satisfies!, same behaviour
3
+ than satisfies, but raises a Walruz::NotAuthorized error if the actor and
4
+ subject can't satisfy the policy
5
+
6
+
1
7
  * 0.0.10 (Aug 26, 2009) Walruz wanted to be an actor too...
2
8
  * Fixed bug related to Walruz::NotAuthorized info, the actor was Walruz
3
9
  instead of the current actor, when the authorization was being called from
data/VERSION.yml CHANGED
@@ -2,4 +2,4 @@
2
2
  :build:
3
3
  :major: 0
4
4
  :minor: 0
5
- :patch: 12
5
+ :patch: 13
data/lib/walruz/actor.rb CHANGED
@@ -105,6 +105,10 @@ module Walruz
105
105
  def satisfies(policy_label, subject)
106
106
  super(self, policy_label, subject)
107
107
  end
108
+
109
+ def satisfies!(policy_label, subject)
110
+ super(self, policy_label, subject)
111
+ end
108
112
 
109
113
  walruz_memoize :can?, :authorize, :satisfies?, :satisfies
110
114
 
@@ -1,4 +1,4 @@
1
- module Walruz
1
+ module Walruz
2
2
 
3
3
  # The objective of this class is to start the invocation
4
4
  # of the authorization process, the methods of this class are used
@@ -24,20 +24,40 @@ module Walruz
24
24
  end
25
25
 
26
26
  def authorize(actor, action, subject)
27
- result = Walruz::Manager.check_action_authorization(actor, action, subject)
27
+ result = Walruz::Manager.check_action_authorization(actor,
28
+ action,
29
+ subject)
28
30
  result[0] ? result[1] : nil
29
31
  end
30
32
 
31
33
  def satisfies?(actor, policy_label, subject)
32
- result = Walruz::Manager.check_policy_authorization(actor, policy_label, subject)
34
+ result = Walruz::Manager.check_policy_authorization(actor,
35
+ policy_label,
36
+ subject)
33
37
  result[0]
34
38
  end
35
39
 
36
40
  def satisfies(actor, policy_label, subject)
37
- result = Walruz::Manager.check_policy_authorization(actor, policy_label, subject)
41
+ result = Walruz::Manager.check_policy_authorization(actor,
42
+ policy_label,
43
+ subject)
38
44
  result[0] ? result[1] : nil
39
45
  end
40
46
 
47
+ def satisfies!(actor, policy_label, subject)
48
+ result = Walruz::Manager.check_policy_authorization(actor,
49
+ policy_label,
50
+ subject)
51
+ if result[0]
52
+ result[1]
53
+ else
54
+ response_params = result[1]
55
+ error_message = response_params[:error_message] ||
56
+ "You are not authorized to access this content"
57
+ raise NotAuthorized.new(actor, subject, :access, error_message)
58
+ end
59
+ end
60
+
41
61
  end
42
62
 
43
63
 
@@ -52,14 +72,14 @@ module Walruz
52
72
  action = if subject.class._walruz_policies.key?(:default)
53
73
  subject.class._walruz_policies.key?(action) ? action : :default
54
74
  else
55
- if subject.class._walruz_policies.key?(action)
75
+ if subject.class._walruz_policies.key?(action)
56
76
  action
57
- else
58
- raise ActionNotFound.new(:subject_action, :subject => subject,
77
+ else
78
+ raise ActionNotFound.new(:subject_action, :subject => subject,
59
79
  :action => action)
60
80
  end
61
81
  end
62
-
82
+
63
83
  begin
64
84
  result = subject.class._walruz_policies[action].
65
85
  return_policy.
@@ -74,19 +94,19 @@ module Walruz
74
94
 
75
95
  def self.check_policy_authorization(actor, policy_label, subject)
76
96
  policy_clz = Walruz.fetch_policy(policy_label)
77
-
97
+
78
98
  begin
79
99
  result = policy_clz.return_policy.new.safe_authorized?(actor, subject)
80
100
  rescue PolicyHalted => e
81
101
  result = [false, { :error_message => e.message }]
82
102
  end
83
103
 
84
- result
104
+ result
85
105
  end
86
106
 
87
107
  private
88
108
 
89
- def self.check_action_authorization_is_declared_on_subject(subject, action)
109
+ def self.check_action_authorization_is_declared_on_subject(subject, action)
90
110
  if subject.class._walruz_policies.nil?
91
111
  message =<<-BEGIN
92
112
  You need to invoke `check_authorizations :#{action} => Policies::SomePolicy` on the #{subject.class.name} class
data/spec/scenario.rb CHANGED
@@ -92,6 +92,7 @@ class Colaboration
92
92
  end
93
93
 
94
94
  class SubjectIsActorPolicy < Walruz::Policy
95
+ set_policy_label :subject_is_actor
95
96
 
96
97
  def authorized?(actor, subject)
97
98
  actor == subject
@@ -48,7 +48,40 @@ describe Walruz::Manager do
48
48
 
49
49
  end
50
50
 
51
+ describe "when executing the satisfies! method" do
52
+
53
+ describe "and the actor and subject satisfy the policy" do
54
+
55
+ it "should return the policy hash" do
56
+ policy_params = Walruz.satisfies!(Beatle::RINGO, :subject_is_actor, Beatle::RINGO)
57
+ policy_params.should_not be_nil
58
+ policy_params[:subject_is_actor?].should be_true
59
+ end
60
+
61
+ end
62
+
63
+ describe "and the actor and subject can't satisfy the policy" do
64
+
65
+ it "should raise a Walruz::NotAuthorized exception" do
66
+ lambda do
67
+ Walruz.satisfies!(Beatle::RINGO, :subject_is_actor, Beatle::JOHN)
68
+ end.should raise_error(Walruz::NotAuthorized)
69
+ end
70
+
71
+ it "should raise a Walruz::NotAuthorized exception with info about the actor, subject and access action" do
72
+ begin
73
+ Walruz.satisfies!(Beatle::RINGO, :subject_is_actor, Beatle::JOHN)
74
+ rescue Walruz::NotAuthorized => e
75
+ e.actor.should == Beatle::RINGO
76
+ e.subject.should == Beatle::JOHN
77
+ e.action.should == :access
78
+ end
79
+ end
80
+
81
+ end
82
+
51
83
  end
52
84
 
85
+ end
53
86
 
54
87
  end
data/walruz.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{walruz}
8
- s.version = "0.0.12"
8
+ s.version = "0.0.13"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Roman Gonzalez"]
12
- s.date = %q{2011-07-12}
12
+ s.date = %q{2011-07-21}
13
13
  s.description = %q{
14
14
  Walruz provides an easy to use DSL to do composition of basic
15
15
  authorization policies to create more complex ones, and then register
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: walruz
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 12
10
- version: 0.0.12
9
+ - 13
10
+ version: 0.0.13
11
11
  platform: ruby
12
12
  authors:
13
13
  - Roman Gonzalez
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-12 00:00:00 -07:00
18
+ date: 2011-07-21 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency