authority 2.1.0 → 2.2.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/CHANGELOG.markdown +7 -1
- data/README.markdown +21 -8
- data/lib/authority.rb +9 -5
- data/lib/authority/controller.rb +6 -3
- data/lib/authority/version.rb +1 -1
- data/lib/generators/templates/authority_initializer.rb +1 -1
- data/spec/authority/abilities_spec.rb +26 -26
- data/spec/authority/authorizer_spec.rb +4 -4
- data/spec/authority/controller_spec.rb +12 -6
- data/spec/authority/integration_spec.rb +77 -0
- data/spec/authority/user_abilities_spec.rb +6 -6
- data/spec/authority_spec.rb +22 -3
- data/spec/support/{ability_model.rb → example_model.rb} +1 -1
- metadata +8 -18
data/CHANGELOG.markdown
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
|
3
|
+
## v2.2.0
|
4
|
+
|
5
|
+
Allow passing options hash to `authorize_action_for`, like `authorize_action_for(@llama, :sporting => @hat_style)`.
|
6
|
+
|
7
|
+
## v2.1.0
|
8
|
+
|
9
|
+
Allow passing options hash, like `current_user.can_create?(Comment, :for => @post)`.
|
4
10
|
|
5
11
|
## v2.0.1
|
6
12
|
|
data/README.markdown
CHANGED
@@ -6,7 +6,7 @@ Authority will work fine with a standalone app or a single sign-on system. You c
|
|
6
6
|
|
7
7
|
It requires that you already have some kind of user object in your application, accessible from all controllers and views via a method like `current_user` (configurable).
|
8
8
|
|
9
|
-
[](http://travis-ci.org/nathanl/authority)
|
9
|
+
[](http://travis-ci.org/nathanl/authority)
|
10
10
|
[](https://gemnasium.com/nathanl/authority)
|
11
11
|
|
12
12
|
## Contents
|
@@ -52,13 +52,13 @@ Using Authority, you have:
|
|
52
52
|
|
53
53
|
Most importantly, you have **total flexibility**: Authority does not constrain you into using a particular scheme of roles and/or permissions.
|
54
54
|
|
55
|
-
Authority lets you:
|
55
|
+
Authority lets you control access based on:
|
56
56
|
|
57
|
-
-
|
58
|
-
-
|
59
|
-
-
|
60
|
-
-
|
61
|
-
-
|
57
|
+
- Roles in your app's database ([rolify](http://github.com/EppO/rolify) makes this easy)
|
58
|
+
- Roles in a separate, single-sign-on app
|
59
|
+
- Users' points (like StackOverflow)
|
60
|
+
- Time and date
|
61
|
+
- Weather, stock prices, vowels in the user's name, or **anything else you can check with Ruby**
|
62
62
|
|
63
63
|
All you have to do is define the methods you need on your authorizers. You have all the flexibility of normal Ruby classes.
|
64
64
|
|
@@ -347,6 +347,8 @@ class LlamasController < ApplicationController
|
|
347
347
|
end
|
348
348
|
```
|
349
349
|
|
350
|
+
As with other authorization checks, you can also pass options here, and they'll be sent along to your authorization method: `authorize_action_for(@llama, :sporting => @hat_style)`. Generally, though, your authorization will depend on some attribute or association of the model instance, so the authorizer can check `@llama.neck_strength` and `@llama.owner.nationality`, etc, without needing any additional information.
|
351
|
+
|
350
352
|
<a name="views">
|
351
353
|
### Views
|
352
354
|
|
@@ -366,7 +368,18 @@ Anytime a user attempts an unauthorized action, Authority calls whatever control
|
|
366
368
|
- Renders `public/403.html`
|
367
369
|
- Logs the violation to whatever logger you configured.
|
368
370
|
|
369
|
-
You can
|
371
|
+
You can define your own `authority_forbidden` method:
|
372
|
+
|
373
|
+
|
374
|
+
```ruby
|
375
|
+
# Send 'em back where they came from with a slap on the wrist
|
376
|
+
def authority_forbidden(exception)
|
377
|
+
Authority.configuration.logger.warn(error.message)
|
378
|
+
redirect_to request.referrer.presence || root_path, :alert => 'You are not authorized to complete that action.'
|
379
|
+
end
|
380
|
+
```
|
381
|
+
|
382
|
+
... or specify a different handler like this:
|
370
383
|
|
371
384
|
```ruby
|
372
385
|
# config/initializers/authority.rb
|
data/lib/authority.rb
CHANGED
@@ -26,13 +26,17 @@ module Authority
|
|
26
26
|
# @param [Symbol] action
|
27
27
|
# @param [Model] resource instance
|
28
28
|
# @param [User] user instance
|
29
|
+
# @param [Hash] options, arbitrary options hash to delegate to the authorizer
|
29
30
|
# @raise [SecurityViolation] if user is not allowed to perform action on resource
|
30
31
|
# @return [Model] resource instance
|
31
|
-
def self.enforce(action, resource, user)
|
32
|
-
action_authorized =
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
def self.enforce(action, resource, user, *options)
|
33
|
+
action_authorized = if options.empty?
|
34
|
+
user.send("can_#{action}?", resource)
|
35
|
+
else
|
36
|
+
user.send("can_#{action}?", resource, Hash[*options])
|
37
|
+
end
|
38
|
+
raise SecurityViolation.new(user, action, resource) unless action_authorized
|
39
|
+
|
36
40
|
resource
|
37
41
|
end
|
38
42
|
|
data/lib/authority/controller.rb
CHANGED
@@ -74,15 +74,18 @@ module Authority
|
|
74
74
|
end
|
75
75
|
|
76
76
|
# To be run in a `before_filter`; ensure this controller action is allowed for the user
|
77
|
+
# Can be used directly within a controller action as well, given an instance or class with or
|
78
|
+
# without options to delegate to the authorizer.
|
77
79
|
#
|
78
|
-
# @param
|
80
|
+
# @param [Class] authority_resource, the model class associated with this controller
|
81
|
+
# @param [Hash] options, arbitrary options hash to forward up the chain to the authorizer
|
79
82
|
# @raise [MissingAction] if controller action isn't a key in `config.controller_action_map`
|
80
|
-
def authorize_action_for(authority_resource)
|
83
|
+
def authorize_action_for(authority_resource, *options)
|
81
84
|
authority_action = self.class.authority_action_map[action_name.to_sym]
|
82
85
|
if authority_action.nil?
|
83
86
|
raise MissingAction.new("No authority action defined for #{action_name}")
|
84
87
|
end
|
85
|
-
Authority.enforce(authority_action, authority_resource, authority_user)
|
88
|
+
Authority.enforce(authority_action, authority_resource, authority_user, *options)
|
86
89
|
end
|
87
90
|
|
88
91
|
class MissingAction < StandardError ; end
|
data/lib/authority/version.rb
CHANGED
@@ -64,7 +64,7 @@ Authority.configure do |config|
|
|
64
64
|
#
|
65
65
|
# Some possible settings:
|
66
66
|
# config.logger = Rails.logger # Log with all your app's other messages
|
67
|
-
# config.logger = Logger.new('
|
67
|
+
# config.logger = Logger.new('log/authority.log') # Use this file
|
68
68
|
# config.logger = Logger.new('/dev/null') # Don't log at all (on a Unix system)
|
69
69
|
|
70
70
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'support/
|
2
|
+
require 'support/example_model'
|
3
3
|
require 'support/user'
|
4
4
|
|
5
5
|
describe Authority::Abilities do
|
@@ -11,31 +11,31 @@ describe Authority::Abilities do
|
|
11
11
|
describe "authorizer" do
|
12
12
|
|
13
13
|
it "should have a class attribute getter for authorizer_name" do
|
14
|
-
|
14
|
+
ExampleModel.should respond_to(:authorizer_name)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should have a class attribute setter for authorizer_name" do
|
18
|
-
|
18
|
+
ExampleModel.should respond_to(:authorizer_name=)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should have a default authorizer_name of 'ApplicationAuthorizer'" do
|
22
|
-
|
22
|
+
ExampleModel.authorizer_name.should eq("ApplicationAuthorizer")
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should constantize the authorizer name as the authorizer" do
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
ExampleModel.instance_variable_set(:@authorizer, nil)
|
27
|
+
ExampleModel.authorizer_name.should_receive(:constantize)
|
28
|
+
ExampleModel.authorizer
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should memoize the authorizer to avoid reconstantizing" do
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
ExampleModel.authorizer
|
33
|
+
ExampleModel.authorizer_name.should_not_receive(:constantize)
|
34
|
+
ExampleModel.authorizer
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should raise a friendly error if the authorizer doesn't exist" do
|
38
|
-
class NoAuthorizerModel <
|
38
|
+
class NoAuthorizerModel < ExampleModel; end ;
|
39
39
|
NoAuthorizerModel.instance_variable_set(:@authorizer, nil)
|
40
40
|
NoAuthorizerModel.authorizer_name = 'NonExistentAuthorizer'
|
41
41
|
expect { NoAuthorizerModel.authorizer }.to raise_error(Authority::NoAuthorizerError)
|
@@ -49,14 +49,14 @@ describe Authority::Abilities do
|
|
49
49
|
method_name = "#{adjective}_by?"
|
50
50
|
|
51
51
|
it "should respond to `#{method_name}`" do
|
52
|
-
|
52
|
+
ExampleModel.should respond_to(method_name)
|
53
53
|
end
|
54
54
|
|
55
55
|
describe "if given an options hash" do
|
56
56
|
|
57
57
|
it "should delegate `#{method_name}` to its authorizer class, passing the options" do
|
58
|
-
|
59
|
-
|
58
|
+
ExampleModel.authorizer.should_receive(method_name).with(@user, :lacking => 'nothing')
|
59
|
+
ExampleModel.send(method_name, @user, :lacking => 'nothing')
|
60
60
|
end
|
61
61
|
|
62
62
|
end
|
@@ -64,8 +64,8 @@ describe Authority::Abilities do
|
|
64
64
|
describe "if not given an options hash" do
|
65
65
|
|
66
66
|
it "should delegate `#{method_name}` to its authorizer class, passing no options" do
|
67
|
-
|
68
|
-
|
67
|
+
ExampleModel.authorizer.should_receive(method_name).with(@user)
|
68
|
+
ExampleModel.send(method_name, @user)
|
69
69
|
end
|
70
70
|
|
71
71
|
end
|
@@ -77,23 +77,23 @@ describe Authority::Abilities do
|
|
77
77
|
describe "instance methods" do
|
78
78
|
|
79
79
|
before :each do
|
80
|
-
@
|
81
|
-
@authorizer =
|
80
|
+
@example_model = ExampleModel.new
|
81
|
+
@authorizer = ExampleModel.authorizer.new(@example_model)
|
82
82
|
end
|
83
83
|
|
84
84
|
Authority.adjectives.each do |adjective|
|
85
85
|
method_name = "#{adjective}_by?"
|
86
86
|
|
87
87
|
it "should respond to `#{method_name}`" do
|
88
|
-
@
|
88
|
+
@example_model.should respond_to(method_name)
|
89
89
|
end
|
90
90
|
|
91
91
|
describe "if given an options hash" do
|
92
92
|
|
93
93
|
it "should delegate `#{method_name}` to a new authorizer instance, passing the options" do
|
94
|
-
|
94
|
+
ExampleModel.authorizer.stub(:new).and_return(@authorizer)
|
95
95
|
@authorizer.should_receive(method_name).with(@user, :with => 'mayo')
|
96
|
-
@
|
96
|
+
@example_model.send(method_name, @user, :with => 'mayo')
|
97
97
|
end
|
98
98
|
|
99
99
|
end
|
@@ -101,9 +101,9 @@ describe Authority::Abilities do
|
|
101
101
|
describe "if not given an options hash" do
|
102
102
|
|
103
103
|
it "should delegate `#{method_name}` to a new authorizer instance, passing no options" do
|
104
|
-
|
104
|
+
ExampleModel.authorizer.stub(:new).and_return(@authorizer)
|
105
105
|
@authorizer.should_receive(method_name).with(@user)
|
106
|
-
@
|
106
|
+
@example_model.send(method_name, @user)
|
107
107
|
end
|
108
108
|
|
109
109
|
end
|
@@ -111,15 +111,15 @@ describe Authority::Abilities do
|
|
111
111
|
end
|
112
112
|
|
113
113
|
it "should provide an accessor for its authorizer" do
|
114
|
-
@
|
114
|
+
@example_model.should respond_to(:authorizer)
|
115
115
|
end
|
116
116
|
|
117
117
|
# When checking instance methods, we want to ensure that every check uses a new
|
118
118
|
# instance of the authorizer. Otherwise, you might check, make a change to the
|
119
119
|
# model instance, check again, and get an outdated answer.
|
120
120
|
it "should always create a new authorizer instance when accessing the authorizer" do
|
121
|
-
@
|
122
|
-
2.times { @
|
121
|
+
@example_model.class.authorizer.should_receive(:new).with(@example_model).twice
|
122
|
+
2.times { @example_model.authorizer }
|
123
123
|
end
|
124
124
|
|
125
125
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'support/
|
2
|
+
require 'support/example_model'
|
3
3
|
require 'support/user'
|
4
4
|
|
5
5
|
describe Authority::Authorizer do
|
6
6
|
|
7
7
|
before :each do
|
8
|
-
@
|
9
|
-
@authorizer = @
|
8
|
+
@example_model = ExampleModel.new
|
9
|
+
@authorizer = @example_model.authorizer
|
10
10
|
@user = User.new
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should take a resource instance in its initializer" do
|
14
|
-
@authorizer.resource.should eq(@
|
14
|
+
@authorizer.resource.should eq(@example_model)
|
15
15
|
end
|
16
16
|
|
17
17
|
describe "instance methods" do
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'support/
|
2
|
+
require 'support/example_model'
|
3
3
|
require 'support/example_controllers'
|
4
4
|
require 'support/mock_rails'
|
5
5
|
require 'support/user'
|
@@ -61,18 +61,18 @@ describe Authority::Controller do
|
|
61
61
|
|
62
62
|
describe "DSL (class) methods" do
|
63
63
|
it "should allow specifying the model to protect" do
|
64
|
-
ExampleController.authorize_actions_for
|
65
|
-
ExampleController.authority_resource.should eq(
|
64
|
+
ExampleController.authorize_actions_for ExampleModel
|
65
|
+
ExampleController.authority_resource.should eq(ExampleModel)
|
66
66
|
end
|
67
67
|
|
68
68
|
it "should pass the options provided to the before filter that is set up" do
|
69
69
|
@options = {:only => [:show, :edit, :update]}
|
70
70
|
ExampleController.should_receive(:before_filter).with(:run_authorization_check, @options)
|
71
|
-
ExampleController.authorize_actions_for
|
71
|
+
ExampleController.authorize_actions_for ExampleModel, @options
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should allow specifying the authority action map in the `authorize_actions_for` declaration" do
|
75
|
-
ExampleController.authorize_actions_for
|
75
|
+
ExampleController.authorize_actions_for ExampleModel, :actions => {:eat => 'delete'}
|
76
76
|
ExampleController.authority_action_map[:eat].should eq('delete')
|
77
77
|
end
|
78
78
|
|
@@ -91,10 +91,16 @@ describe Authority::Controller do
|
|
91
91
|
end
|
92
92
|
|
93
93
|
it "should check authorization on the model specified" do
|
94
|
-
@controller.should_receive(:authorize_action_for).with(
|
94
|
+
@controller.should_receive(:authorize_action_for).with(ExampleModel)
|
95
95
|
@controller.send(:run_authorization_check)
|
96
96
|
end
|
97
97
|
|
98
|
+
it "should pass the options provided to `authorize_action_for` downstream" do
|
99
|
+
@controller.stub!(:action_name).and_return(:destroy)
|
100
|
+
Authority.should_receive(:enforce).with('delete', ExampleModel, @user, :for => 'context')
|
101
|
+
@controller.send(:authorize_action_for, ExampleModel, :for => 'context')
|
102
|
+
end
|
103
|
+
|
98
104
|
it "should raise a SecurityViolation if authorization fails" do
|
99
105
|
expect { @controller.send(:run_authorization_check) }.to raise_error(Authority::SecurityViolation)
|
100
106
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'support/example_model'
|
3
|
+
require 'support/user'
|
4
|
+
|
5
|
+
describe "integration from user through model to authorizer" do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
@user = User.new
|
9
|
+
@example_model = ExampleModel.new
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "class methods" do
|
13
|
+
|
14
|
+
Authority.verbs.each do |verb|
|
15
|
+
verb_method = "can_#{verb}?"
|
16
|
+
adjective = Authority.abilities[verb]
|
17
|
+
adjective_method = "#{adjective}_by?"
|
18
|
+
|
19
|
+
describe "if given an options hash" do
|
20
|
+
|
21
|
+
it "should delegate `#{adjective_method}` to its authorizer class, passing the options" do
|
22
|
+
ExampleModel.authorizer.should_receive(adjective_method).with(@user, :lacking => 'nothing')
|
23
|
+
@user.send(verb_method, ExampleModel, :lacking => 'nothing')
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "if not given an options hash" do
|
29
|
+
|
30
|
+
it "should delegate `#{adjective_method}` to its authorizer class, passing no options" do
|
31
|
+
ExampleModel.authorizer.should_receive(adjective_method).with(@user)
|
32
|
+
@user.send(verb_method, @example_model)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "instance methods" do
|
42
|
+
|
43
|
+
before :each do
|
44
|
+
@user = User.new
|
45
|
+
@example_model = ExampleModel.new
|
46
|
+
@authorizer = ExampleModel.authorizer.new(@example_model)
|
47
|
+
ExampleModel.authorizer.stub(:new).and_return(@authorizer)
|
48
|
+
end
|
49
|
+
|
50
|
+
Authority.verbs.each do |verb|
|
51
|
+
verb_method = "can_#{verb}?"
|
52
|
+
adjective = Authority.abilities[verb]
|
53
|
+
adjective_method = "#{adjective}_by?"
|
54
|
+
|
55
|
+
describe "if given an options hash" do
|
56
|
+
|
57
|
+
it "should delegate `#{adjective_method}` to a new authorizer instance, passing the options" do
|
58
|
+
@authorizer.should_receive(adjective_method).with(@user, :consistency => 'mushy')
|
59
|
+
@user.send(verb_method, @example_model, :consistency => 'mushy')
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "if not given an options hash" do
|
65
|
+
|
66
|
+
it "should delegate `#{adjective_method}` to a new authorizer instance, passing no options" do
|
67
|
+
@authorizer.should_receive(adjective_method).with(@user)
|
68
|
+
@user.send(verb_method, @example_model)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'support/
|
2
|
+
require 'support/example_model'
|
3
3
|
require 'support/user'
|
4
4
|
|
5
5
|
describe Authority::UserAbilities do
|
6
6
|
|
7
7
|
before :each do
|
8
|
-
@
|
8
|
+
@example_model = ExampleModel.new
|
9
9
|
@user = User.new
|
10
10
|
end
|
11
11
|
|
@@ -19,8 +19,8 @@ describe Authority::UserAbilities do
|
|
19
19
|
describe "if given options" do
|
20
20
|
|
21
21
|
it "should delegate the authorization check to the resource, passing the options" do
|
22
|
-
@
|
23
|
-
@user.send(method_name, @
|
22
|
+
@example_model.should_receive("#{Authority.abilities[verb]}_by?").with(@user, :size => 'wee')
|
23
|
+
@user.send(method_name, @example_model, :size => 'wee')
|
24
24
|
end
|
25
25
|
|
26
26
|
end
|
@@ -28,8 +28,8 @@ describe Authority::UserAbilities do
|
|
28
28
|
describe "if not given options" do
|
29
29
|
|
30
30
|
it "should delegate the authorization check to the resource, passing no options" do
|
31
|
-
@
|
32
|
-
@user.send(method_name, @
|
31
|
+
@example_model.should_receive("#{Authority.abilities[verb]}_by?").with(@user)
|
32
|
+
@user.send(method_name, @example_model)
|
33
33
|
end
|
34
34
|
|
35
35
|
end
|
data/spec/authority_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'support/
|
2
|
+
require 'support/example_model'
|
3
3
|
require 'support/user'
|
4
4
|
|
5
5
|
describe Authority do
|
@@ -44,12 +44,31 @@ describe Authority do
|
|
44
44
|
@user = User.new
|
45
45
|
end
|
46
46
|
|
47
|
+
describe "if given options" do
|
48
|
+
|
49
|
+
it "should check the user's authorization, passing along the options" do
|
50
|
+
options = { :for => 'context' }
|
51
|
+
@user.should_receive(:can_delete?).with(ExampleModel, options).and_return(true)
|
52
|
+
Authority.enforce(:delete, ExampleModel, @user, options)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "if not given options" do
|
58
|
+
|
59
|
+
it "should check the user's authorization, passing no options" do
|
60
|
+
@user.should_receive(:can_delete?).with(ExampleModel).and_return(true)
|
61
|
+
Authority.enforce(:delete, ExampleModel, @user)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
47
66
|
it "should raise a SecurityViolation if the action is unauthorized" do
|
48
|
-
expect { Authority.enforce(:update,
|
67
|
+
expect { Authority.enforce(:update, ExampleModel, @user) }.to raise_error(Authority::SecurityViolation)
|
49
68
|
end
|
50
69
|
|
51
70
|
it "should not raise a SecurityViolation if the action is authorized" do
|
52
|
-
expect { Authority.enforce(:read,
|
71
|
+
expect { Authority.enforce(:read, ExampleModel, @user) }.not_to raise_error(Authority::SecurityViolation)
|
53
72
|
end
|
54
73
|
|
55
74
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authority
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-10-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &81456900 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
version: 3.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *81456900
|
26
26
|
description: Authority helps you authorize actions in your Rails app. It's ORM-neutral
|
27
27
|
and has very little fancy syntax; just group your models under one or more Authorizer
|
28
28
|
classes and write plain Ruby methods on them.
|
@@ -63,11 +63,12 @@ files:
|
|
63
63
|
- spec/authority/authorizer_spec.rb
|
64
64
|
- spec/authority/configuration_spec.rb
|
65
65
|
- spec/authority/controller_spec.rb
|
66
|
+
- spec/authority/integration_spec.rb
|
66
67
|
- spec/authority/user_abilities_spec.rb
|
67
68
|
- spec/authority_spec.rb
|
68
69
|
- spec/spec_helper.rb
|
69
|
-
- spec/support/ability_model.rb
|
70
70
|
- spec/support/example_controllers.rb
|
71
|
+
- spec/support/example_model.rb
|
71
72
|
- spec/support/mock_rails.rb
|
72
73
|
- spec/support/user.rb
|
73
74
|
homepage: https://github.com/nathanl/authority
|
@@ -90,20 +91,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
91
|
version: '0'
|
91
92
|
requirements: []
|
92
93
|
rubyforge_project:
|
93
|
-
rubygems_version: 1.8.
|
94
|
+
rubygems_version: 1.8.10
|
94
95
|
signing_key:
|
95
96
|
specification_version: 3
|
96
97
|
summary: Authority helps you authorize actions in your Rails app using plain Ruby
|
97
98
|
methods on Authorizer classes.
|
98
|
-
test_files:
|
99
|
-
- spec/authority/abilities_spec.rb
|
100
|
-
- spec/authority/authorizer_spec.rb
|
101
|
-
- spec/authority/configuration_spec.rb
|
102
|
-
- spec/authority/controller_spec.rb
|
103
|
-
- spec/authority/user_abilities_spec.rb
|
104
|
-
- spec/authority_spec.rb
|
105
|
-
- spec/spec_helper.rb
|
106
|
-
- spec/support/ability_model.rb
|
107
|
-
- spec/support/example_controllers.rb
|
108
|
-
- spec/support/mock_rails.rb
|
109
|
-
- spec/support/user.rb
|
99
|
+
test_files: []
|