grape-cancan 0.0.2 → 0.0.3
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.
- checksums.yaml +5 -5
- data/.travis.yml +14 -0
- data/Gemfile +9 -0
- data/README.md +20 -1
- data/Rakefile +7 -1
- data/grape-cancan.gemspec +4 -2
- data/lib/grape/cancan.rb +5 -3
- data/lib/grape/cancan/version.rb +1 -1
- data/test/grape/cancan_test.rb +66 -0
- metadata +50 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b9b072e32444e118343956cb4f3cffa02d7587e8fa9b7744a2dcccb0a3a28e33
|
4
|
+
data.tar.gz: 604a6a1d922507672f37db5983f738793cd427035aa8833d6493922ca5fba40e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75e723b3b127a99fd703f8ba468283890cea6234cc7f547cdd4f5b22a894dae4da54b5ff258fd66cb58439cd02a3736bd3e7ab72320d818570e69cab9de40368
|
7
|
+
data.tar.gz: f91bbcb23de8f2f9fc89f632544df3adb3613dfeed7ebb7e9e4997f328b83dbcfd8c973491481dfd09174f287b42fde8d342b417102c4a32282ac354a1c0f87a
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Grape::CanCan
|
1
|
+
# Grape::CanCan [](https://travis-ci.org/rzane/grape-cancan)
|
2
2
|
|
3
3
|
Use CanCan to authorize your Grape endpoints.
|
4
4
|
|
@@ -71,6 +71,25 @@ class Users < Grape::API
|
|
71
71
|
end
|
72
72
|
```
|
73
73
|
|
74
|
+
#### Handle Unauthorized Access
|
75
|
+
|
76
|
+
If the user authorization fails, a `CanCan::AccessDenied` exception will be raised. You should catch this and respond appropriately. For example, you could [redirect the user to the root page](https://github.com/CanCanCommunity/cancancan#3-handle-unauthorized-access), or return a 403 Forbidden as in this example (the `error!` is a [convenience provided by Grape](https://github.com/ruby-grape/grape#raising-exceptions)):
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
class Users < Grape::API
|
80
|
+
resource :users
|
81
|
+
rescue_from ::CanCan::AccessDenied do
|
82
|
+
error!('403 Forbidden', 403)
|
83
|
+
end
|
84
|
+
|
85
|
+
get '/:id' do
|
86
|
+
@user = User.find(params[:id])
|
87
|
+
authorize! :read, @user
|
88
|
+
@user
|
89
|
+
end
|
90
|
+
end
|
91
|
+
```
|
92
|
+
|
74
93
|
## Contributing
|
75
94
|
|
76
95
|
1. Fork it ( https://github.com/rzane/grape-cancan/fork )
|
data/Rakefile
CHANGED
data/grape-cancan.gemspec
CHANGED
@@ -18,9 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency 'grape', '
|
21
|
+
spec.add_dependency 'grape', '~> 1.2'
|
22
22
|
spec.add_dependency 'cancancan'
|
23
23
|
|
24
|
-
spec.add_development_dependency 'bundler', '~>
|
24
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
25
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
+
spec.add_development_dependency 'minitest', '~> 5.8.4'
|
27
|
+
spec.add_development_dependency 'rack-test'
|
26
28
|
end
|
data/lib/grape/cancan.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'grape'
|
2
2
|
require 'grape/cancan/version'
|
3
|
+
require 'active_support/inflector'
|
4
|
+
require 'active_support/core_ext/module/delegation'
|
3
5
|
|
4
6
|
module Grape
|
5
7
|
module CanCan
|
@@ -23,8 +25,8 @@ module Grape
|
|
23
25
|
authorize!(*opts[:authorize]) if opts.key?(:authorize)
|
24
26
|
end
|
25
27
|
end
|
26
|
-
|
27
|
-
Grape::API.extend Grape::CanCan::API
|
28
|
-
Grape::Endpoint.send :include, Grape::CanCan::Endpoint
|
29
28
|
end
|
30
29
|
end
|
30
|
+
|
31
|
+
Grape::API::Instance.extend Grape::CanCan::API
|
32
|
+
Grape::Endpoint.send :include, Grape::CanCan::Endpoint
|
data/lib/grape/cancan/version.rb
CHANGED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'rack/test'
|
3
|
+
require 'grape/cancan'
|
4
|
+
require 'cancancan'
|
5
|
+
|
6
|
+
User = Class.new
|
7
|
+
|
8
|
+
class Ability
|
9
|
+
include CanCan::Ability
|
10
|
+
|
11
|
+
def initialize(user)
|
12
|
+
can :read, User
|
13
|
+
cannot :love, User
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class API < Grape::API
|
18
|
+
authorize_routes!
|
19
|
+
helpers { define_method(:current_user) { User.new } }
|
20
|
+
get('/can') { can? :love, current_user }
|
21
|
+
get('/cannot') { cannot? :read, current_user }
|
22
|
+
get('/authorize_option', authorize: [:read, User])
|
23
|
+
get('/authorize_option_fail', authorize: [:love, User])
|
24
|
+
get('/authorize_explicit') { authorize! :read, current_user }
|
25
|
+
get('/authorize_explicit_fail') { authorize! :love, current_user }
|
26
|
+
end
|
27
|
+
|
28
|
+
class GrapeCancanTest < Minitest::Test
|
29
|
+
include Rack::Test::Methods
|
30
|
+
|
31
|
+
def app
|
32
|
+
API
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_can
|
36
|
+
get '/can'
|
37
|
+
assert_equal 'false', last_response.body
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_cannot
|
41
|
+
get '/cannot'
|
42
|
+
assert_equal 'false', last_response.body
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_authorize_option
|
46
|
+
get '/authorize_option'
|
47
|
+
assert_equal 200, last_response.status
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_authorize_option_failure
|
51
|
+
assert_raises CanCan::AccessDenied do
|
52
|
+
get '/authorize_option_fail'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_authorize_explicit
|
57
|
+
get '/authorize_explicit'
|
58
|
+
assert_equal 200, last_response.status
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_authorize_explicit_failure
|
62
|
+
assert_raises CanCan::AccessDenied do
|
63
|
+
get '/authorize_explicit_fail'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
metadata
CHANGED
@@ -1,71 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-cancan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ray Zane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '1.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: cancancan
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '10.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 5.8.4
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 5.8.4
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rack-test
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
description: Authorize your Grape API with CanCan
|
70
98
|
email:
|
71
99
|
- raymondzane@gmail.com
|
@@ -73,7 +101,8 @@ executables: []
|
|
73
101
|
extensions: []
|
74
102
|
extra_rdoc_files: []
|
75
103
|
files:
|
76
|
-
- .gitignore
|
104
|
+
- ".gitignore"
|
105
|
+
- ".travis.yml"
|
77
106
|
- Gemfile
|
78
107
|
- LICENSE.txt
|
79
108
|
- README.md
|
@@ -82,6 +111,7 @@ files:
|
|
82
111
|
- lib/grape-cancan.rb
|
83
112
|
- lib/grape/cancan.rb
|
84
113
|
- lib/grape/cancan/version.rb
|
114
|
+
- test/grape/cancan_test.rb
|
85
115
|
homepage: https://github.com/rzane/grape-cancan
|
86
116
|
licenses:
|
87
117
|
- MIT
|
@@ -92,18 +122,18 @@ require_paths:
|
|
92
122
|
- lib
|
93
123
|
required_ruby_version: !ruby/object:Gem::Requirement
|
94
124
|
requirements:
|
95
|
-
- -
|
125
|
+
- - ">="
|
96
126
|
- !ruby/object:Gem::Version
|
97
127
|
version: '0'
|
98
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
129
|
requirements:
|
100
|
-
- -
|
130
|
+
- - ">="
|
101
131
|
- !ruby/object:Gem::Version
|
102
132
|
version: '0'
|
103
133
|
requirements: []
|
104
|
-
|
105
|
-
rubygems_version: 2.2.2
|
134
|
+
rubygems_version: 3.0.3
|
106
135
|
signing_key:
|
107
136
|
specification_version: 4
|
108
137
|
summary: Authorize your Grape API with CanCan
|
109
|
-
test_files:
|
138
|
+
test_files:
|
139
|
+
- test/grape/cancan_test.rb
|