action_policy-graphql 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -1
- data/README.md +2 -0
- data/gemfiles/action_policy/0.3.gemfile +5 -0
- data/gemfiles/action_policy/master.gemfile +5 -0
- data/gemfiles/{graphqlmaster.gemfile → graphql/master.gemfile} +1 -1
- data/lib/action_policy/graphql/authorized_field.rb +26 -17
- data/lib/action_policy/graphql/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4af0cfd306d4128f52758c4336988f29bfa8628f5839aa18e1a54b366c07a9b9
|
4
|
+
data.tar.gz: 69098890e8c59b44dd2af5a902639dbc407ce190a73e55c1d84b6c9ce464bad0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ee55992d03aa2cd350c2c29e9c632c84dff85288a55ef3608e5f277d407f182a98a1bafd820e18caffe4571b1f896cc5608f72979958da0336e6afef0d7f7ef
|
7
|
+
data.tar.gz: a99cac79463311fecb84d459b537555b9cefe88e0b268b07412d5a0b053ce603c8cea3a426e92cd58033b789d474f008bd3f22b7296270f66e0409f37c0ac6bf
|
data/.travis.yml
CHANGED
@@ -15,9 +15,13 @@ matrix:
|
|
15
15
|
fast_finish: true
|
16
16
|
include:
|
17
17
|
- rvm: ruby-head
|
18
|
-
gemfile: gemfiles/
|
18
|
+
gemfile: gemfiles/graphql/master.gemfile
|
19
19
|
- rvm: 2.6
|
20
|
-
gemfile: gemfiles/
|
20
|
+
gemfile: gemfiles/graphql/master.gemfile
|
21
|
+
- rvm: 2.6
|
22
|
+
gemfile: gemfiles/action_policy/master.gemfile
|
23
|
+
- rvm: 2.6
|
24
|
+
gemfile: gemfiles/action_policy/0.3.gemfile
|
21
25
|
- rvm: jruby-9.2.5.0
|
22
26
|
gemfile: gemfiles/jruby.gemfile
|
23
27
|
- rvm: 2.6
|
@@ -28,6 +32,8 @@ matrix:
|
|
28
32
|
gemfile: Gemfile
|
29
33
|
allow_failures:
|
30
34
|
- rvm: ruby-head
|
31
|
-
gemfile: gemfiles/
|
35
|
+
gemfile: gemfiles/graphql/master.gemfile
|
36
|
+
- rvm: 2.6
|
37
|
+
gemfile: gemfiles/graphql/master.gemfile
|
32
38
|
- rvm: 2.6
|
33
|
-
gemfile: gemfiles/
|
39
|
+
gemfile: gemfiles/action_policy/master.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
## master (unreleased)
|
4
4
|
|
5
|
+
## 0.3.2 (2019-12-12)
|
6
|
+
|
7
|
+
- Fix compatibility with Action Policy 0.4.0 ([@haines][])
|
8
|
+
|
5
9
|
## 0.3.1 (2019-10-23)
|
6
10
|
|
7
11
|
- Add support for using Action Policy methods in `self.authorized?`. ([@palkan][])
|
@@ -30,3 +34,4 @@ Action Policy helpers there.
|
|
30
34
|
- Initial version. ([@palkan][])
|
31
35
|
|
32
36
|
[@palkan]: https://github.com/palkan
|
37
|
+
[@haines]: https://github.com/haines
|
data/Gemfile
CHANGED
@@ -11,6 +11,6 @@ if File.exist?(local_gemfile)
|
|
11
11
|
# Specify custom action_policy/graphql-ruby version in Gemfile.local
|
12
12
|
eval(File.read(local_gemfile)) # rubocop:disable Security/Eval
|
13
13
|
else
|
14
|
-
gem "action_policy", "~> 0.
|
14
|
+
gem "action_policy", "~> 0.4.0"
|
15
15
|
gem "graphql", "~> 1.9.3"
|
16
16
|
end
|
data/README.md
CHANGED
@@ -80,6 +80,8 @@ end
|
|
80
80
|
|
81
81
|
You can customize the authorization options, e.g. `authorize: {to: :preview?, with: CustomPolicy}`.
|
82
82
|
|
83
|
+
If you don't want to raise an exception but return a null instead, you should set a `raise: false` option.
|
84
|
+
|
83
85
|
### `authorized_scope: *`
|
84
86
|
|
85
87
|
You can add `authorized_scope: true` option to the field (list or _connection_ field) to
|
@@ -13,52 +13,61 @@ module ActionPolicy
|
|
13
13
|
# field :comments, null: false, authorized: { type: :relation, with: MyPostPolicy }
|
14
14
|
# end
|
15
15
|
module AuthorizedField
|
16
|
-
class
|
17
|
-
def
|
18
|
-
|
19
|
-
options
|
20
|
-
|
16
|
+
class Extension < ::GraphQL::Schema::FieldExtension
|
17
|
+
def extract_option(key, &default)
|
18
|
+
value = options.fetch(key, &default)
|
19
|
+
options.delete key
|
20
|
+
value
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class AuthorizeExtension < Extension
|
25
|
+
def apply
|
26
|
+
@to = extract_option(:to) { ::ActionPolicy::GraphQL.default_authorize_rule }
|
27
|
+
@raise = extract_option(:raise) { ::ActionPolicy::GraphQL.authorize_raise_exception }
|
21
28
|
end
|
22
29
|
|
23
30
|
def after_resolve(value:, context:, object:, **_rest)
|
24
31
|
return value if value.nil?
|
25
32
|
|
26
|
-
if
|
27
|
-
object.authorize! value, **options
|
33
|
+
if @raise
|
34
|
+
object.authorize! value, to: @to, **options
|
28
35
|
value
|
29
36
|
else
|
30
|
-
object.allowed_to?(
|
37
|
+
object.allowed_to?(@to, value, **options) ? value : nil
|
31
38
|
end
|
32
39
|
end
|
33
40
|
end
|
34
41
|
|
35
|
-
class PreauthorizeExtension <
|
36
|
-
def
|
37
|
-
super
|
42
|
+
class PreauthorizeExtension < Extension
|
43
|
+
def apply
|
38
44
|
if options[:with].nil?
|
39
45
|
raise ArgumentError, "You must specify the policy for preauthorization: " \
|
40
46
|
"`field :#{field.name}, preauthorize: {with: SomePolicy}`"
|
41
47
|
end
|
42
|
-
|
48
|
+
|
49
|
+
@to = extract_option(:to) do
|
43
50
|
if field.type.list?
|
44
51
|
::ActionPolicy::GraphQL.default_preauthorize_list_rule
|
45
52
|
else
|
46
53
|
::ActionPolicy::GraphQL.default_preauthorize_node_rule
|
47
54
|
end
|
48
|
-
|
55
|
+
end
|
56
|
+
|
57
|
+
@raise = extract_option(:raise) { ::ActionPolicy::GraphQL.authorize_raise_exception }
|
49
58
|
end
|
50
59
|
|
51
60
|
def resolve(context:, object:, arguments:, **_rest)
|
52
|
-
if
|
53
|
-
object.authorize! field.name, **options
|
61
|
+
if @raise
|
62
|
+
object.authorize! field.name, to: @to, **options
|
54
63
|
yield object, arguments
|
55
|
-
elsif object.allowed_to?(
|
64
|
+
elsif object.allowed_to?(@to, field.name, **options)
|
56
65
|
yield object, arguments
|
57
66
|
end
|
58
67
|
end
|
59
68
|
end
|
60
69
|
|
61
|
-
class ScopeExtension <
|
70
|
+
class ScopeExtension < Extension
|
62
71
|
def after_resolve(value:, context:, object:, **_rest)
|
63
72
|
return value if value.nil?
|
64
73
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_policy-graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: action_policy
|
@@ -154,7 +154,9 @@ files:
|
|
154
154
|
- action_policy-graphql.gemspec
|
155
155
|
- bin/console
|
156
156
|
- bin/setup
|
157
|
-
- gemfiles/
|
157
|
+
- gemfiles/action_policy/0.3.gemfile
|
158
|
+
- gemfiles/action_policy/master.gemfile
|
159
|
+
- gemfiles/graphql/master.gemfile
|
158
160
|
- gemfiles/jruby.gemfile
|
159
161
|
- lib/action_policy-graphql.rb
|
160
162
|
- lib/action_policy/graphql.rb
|
@@ -188,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
190
|
- !ruby/object:Gem::Version
|
189
191
|
version: '0'
|
190
192
|
requirements: []
|
191
|
-
rubygems_version: 3.0.
|
193
|
+
rubygems_version: 3.0.6
|
192
194
|
signing_key:
|
193
195
|
specification_version: 4
|
194
196
|
summary: Action Policy integration for GraphQL-Ruby
|