authoritah 0.1.1 → 0.1.2

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.
@@ -12,6 +12,8 @@ module Authoritah
12
12
  base.send(:include, InstanceMethods)
13
13
 
14
14
  base.before_filter :check_permissions
15
+ base.class_inheritable_accessor :controller_permissions
16
+ base.controller_permissions = PermissionSet.new
15
17
  end
16
18
 
17
19
  module ClassMethods
@@ -37,8 +39,7 @@ module Authoritah
37
39
  role_method = options.to_a.first[0]
38
40
  role_predicate = options.to_a.first[1]
39
41
 
40
- controller_permissions[controller_name.to_sym] ||= PermissionSet.new
41
- controller_permissions[controller_name.to_sym] << {
42
+ controller_permissions << {
42
43
  :type => perm_type,
43
44
  :role_method => role_method,
44
45
  :role_predicate => role_predicate,
@@ -47,22 +48,14 @@ module Authoritah
47
48
  }
48
49
  end
49
50
 
50
- def this_controllers_permissions
51
- controller_permissions[controller_name.to_sym]
52
- end
53
-
54
51
  protected
55
52
 
56
53
  def check_role_selectors(options)
57
54
  raise Authoritah::Controller::OptionsError.new("Too many role selectors") if options.size > 1
58
55
  end
59
56
 
60
- def controller_permissions
61
- @@controller_permissions ||= {}
62
- end
63
-
64
57
  def clear_permissions
65
- @@controller_permissions = {}
58
+ self.controller_permissions = PermissionSet.new
66
59
  end
67
60
  end
68
61
 
@@ -79,7 +72,7 @@ module Authoritah
79
72
  end
80
73
 
81
74
  def permitted?(action)
82
- return true unless permissions = self.class.this_controllers_permissions
75
+ return true unless permissions = self.controller_permissions
83
76
  permissions.permits?(self, action)
84
77
  end
85
78
  end
@@ -5,6 +5,8 @@ describe Authoritah::Controller do
5
5
  before(:each) do
6
6
  ActionController::Base.send(:include, Authoritah::Controller)
7
7
  ActionController::Base.send(:clear_permissions)
8
+ TestAuthorizerController.send(:clear_permissions)
9
+ SpecialisedTestAuthorizerController.send(:clear_permissions)
8
10
  end
9
11
 
10
12
  describe "adding methods to controllers" do
@@ -30,7 +32,7 @@ describe Authoritah::Controller do
30
32
  describe "a basic permits wildcard rule with no predicate" do
31
33
  before(:each) do
32
34
  TestAuthorizerController.permits(:current_user)
33
- @permissions = TestAuthorizerController.send(:controller_permissions)[:test_authorizer]
35
+ @permissions = TestAuthorizerController.send(:controller_permissions)
34
36
  end
35
37
  it "should have one permission" do @permissions.size.should == 1 end
36
38
  it "should use current_user to retrieve the 'role object'" do @permissions.first[:role_method].should == :current_user end
@@ -41,9 +43,11 @@ describe Authoritah::Controller do
41
43
  describe "a basic permits wildcard rule" do
42
44
  before(:each) do
43
45
  TestAuthorizerController.permits(:current_user => :logged_in?)
44
- @permissions = TestAuthorizerController.send(:controller_permissions)[:test_authorizer]
46
+ @permissions = TestAuthorizerController.send(:controller_permissions)
47
+ end
48
+ it "should have one permission" do
49
+ @permissions.size.should == 1
45
50
  end
46
- it "should have one permission" do @permissions.size.should == 1 end
47
51
  it "should use current_user to retrieve the 'role object'" do @permissions.first[:role_method].should == :current_user end
48
52
  it "should use logged_in? as the predicate to call on the 'role object'" do @permissions.first[:role_predicate].should == :logged_in? end
49
53
  it "should not specify the actions" do @permissions.first[:actions].should == [:all] end
@@ -52,7 +56,7 @@ describe Authoritah::Controller do
52
56
  describe "a basic permits rule on a single action" do
53
57
  before(:each) do
54
58
  TestAuthorizerController.permits(:current_user => :logged_in?, :to => :show)
55
- @permissions = TestAuthorizerController.send(:controller_permissions)[:test_authorizer]
59
+ @permissions = TestAuthorizerController.send(:controller_permissions)
56
60
  end
57
61
  it "should have one permission" do @permissions.size.should == 1 end
58
62
  it "should use current_user to retrieve the 'role object'" do @permissions.first[:role_method].should == :current_user end
@@ -63,7 +67,7 @@ describe Authoritah::Controller do
63
67
  describe "a basic rule on many actions" do
64
68
  before(:each) do
65
69
  TestAuthorizerController.permits(:current_user => :logged_in?, :to => [:show, :create, :update])
66
- @permissions = TestAuthorizerController.send(:controller_permissions)[:test_authorizer]
70
+ @permissions = TestAuthorizerController.send(:controller_permissions)
67
71
  end
68
72
  it "should specify the actions" do @permissions.first[:actions].should == [:show, :create, :update] end
69
73
  end
@@ -74,12 +78,25 @@ describe TestAuthorizerController, :type => :controller do
74
78
  before(:each) do
75
79
  TestAuthorizerController.send(:include, Authoritah::Controller)
76
80
  TestAuthorizerController.send(:clear_permissions)
81
+ SpecialisedTestAuthorizerController.send(:include, Authoritah::Controller)
82
+ SpecialisedTestAuthorizerController.send(:clear_permissions)
77
83
  end
78
84
 
79
85
  context "with no permissions set " do
80
86
  it "should render the index" do get :index; response.should render_template('index') end
81
87
  end
82
88
 
89
+ it "should inherit rules in a subclass" do
90
+ class ParentController < ActionController::Base
91
+ include Authoritah::Controller
92
+ permits :current_user
93
+ end
94
+ class ChildController < ParentController
95
+ end
96
+ ChildController.controller_permissions.size.should == 1
97
+ ChildController.controller_permissions.first[:role_method].should == :current_user
98
+ end
99
+
83
100
  describe "specifying permit rules" do
84
101
  context "with a wildcard permission (no predicate)" do
85
102
  before(:each) do
@@ -1,7 +1,7 @@
1
1
  # Be sure to restart your server when you modify this file
2
2
 
3
3
  # Specifies gem version of Rails to use when vendor/rails is not present
4
- RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION
4
+ RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION
5
5
 
6
6
  # Bootstrap the Rails environment, frameworks, and default configuration
7
7
  require File.join(File.dirname(__FILE__), 'boot')
@@ -31,3 +31,5 @@ class TestAuthorizerController < ActionController::Base
31
31
 
32
32
  end
33
33
 
34
+ class SpecialisedTestAuthorizerController < TestAuthorizerController
35
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authoritah
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 2
9
+ version: 0.1.2
5
10
  platform: ruby
6
11
  authors:
7
12
  - Steven Mohapi-Banks
@@ -9,39 +14,51 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-11-18 00:00:00 +00:00
17
+ date: 2010-03-04 00:00:00 +00:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 9
23
31
  version: 1.2.9
24
- version:
32
+ type: :development
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: rspec-rails
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 2
44
+ - 9
33
45
  version: 1.2.9
34
- version:
46
+ type: :development
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: mocha
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
40
52
  requirements:
41
53
  - - ">="
42
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 9
58
+ - 8
43
59
  version: 0.9.8
44
- version:
60
+ type: :development
61
+ version_requirements: *id003
45
62
  description: A description of a really simple authorization plugin for Rails.
46
63
  email: steven.mohapibanks@me.com
47
64
  executables: []
@@ -69,18 +86,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
69
86
  requirements:
70
87
  - - ">="
71
88
  - !ruby/object:Gem::Version
89
+ segments:
90
+ - 0
72
91
  version: "0"
73
- version:
74
92
  required_rubygems_version: !ruby/object:Gem::Requirement
75
93
  requirements:
76
94
  - - ">="
77
95
  - !ruby/object:Gem::Version
96
+ segments:
97
+ - 0
78
98
  version: "0"
79
- version:
80
99
  requirements: []
81
100
 
82
101
  rubyforge_project:
83
- rubygems_version: 1.3.5
102
+ rubygems_version: 1.3.6
84
103
  signing_key:
85
104
  specification_version: 3
86
105
  summary: A really simple authorization plugin for Rails.