deep_unrest 0.1.71 → 0.1.75
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/deep_unrest/authorization/pundit_strategy.rb +11 -4
- data/lib/deep_unrest/read.rb +10 -25
- data/lib/deep_unrest/version.rb +1 -1
- data/lib/deep_unrest/write.rb +3 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd904080ca3e663bf6e313f0b7c865cab32121f2f22ed02b89ebe28886092232
|
4
|
+
data.tar.gz: 2de79ffc0cefad4e403b60981f306fb4ca05d1485c88ba4a0396373f2f46c920
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92304e27f64f7c15dd870e65f814a0ad690230a324d801680f69e9b3103025afdfdd873c69a9511dc8fda133d1527625986b38a652bcd61867d15d866375277e
|
7
|
+
data.tar.gz: a879168e0ac312802e28dfbdc71f8e4851f0a462e32c00ea0c3898865dbd37c72bddabd6940e7c8c225e8cb93204c0ff68e7a3e6844239cc2abf67d9025b5f51
|
@@ -17,12 +17,19 @@ module DeepUnrest
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.auth_error_message(user, scope)
|
20
|
-
|
21
|
-
|
20
|
+
if user
|
21
|
+
actor = "#{user.class.name} with id '#{user.id}' is"
|
22
|
+
else
|
23
|
+
actor = "Anonymous users are"
|
24
|
+
end
|
25
|
+
|
26
|
+
target = (scope[:type] || scope[:key]).to_s.classify
|
22
27
|
unless %i[create update_all].include? scope[:scope_type]
|
23
|
-
|
28
|
+
target_id = (scope[:id] || scope.dig(:query, :id)).to_s.gsub('.', '')
|
29
|
+
target += " with id '#{target_id.to_s.gsub('.', '')}'"
|
24
30
|
end
|
25
|
-
|
31
|
+
|
32
|
+
msg = "#{actor} not authorized to #{scope[:scope_type].to_s.downcase} #{target}"
|
26
33
|
|
27
34
|
[{ title: msg,
|
28
35
|
source: { pointer: scope[:path] } }].to_json
|
data/lib/deep_unrest/read.rb
CHANGED
@@ -116,27 +116,14 @@ module DeepUnrest
|
|
116
116
|
paginator = get_paginator(query, parent)
|
117
117
|
resource = item[:resource]
|
118
118
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
alias_method :records_original, :records
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
# TODO: find a way to do this that doesn't blow out the original :records method
|
127
|
-
resource.define_singleton_method(:records) { |ctx|
|
128
|
-
full_scope = if self.respond_to? :records_original
|
129
|
-
records_original(ctx)
|
130
|
-
else
|
131
|
-
super(ctx)
|
132
|
-
end
|
133
|
-
|
134
|
-
item[:scope].merge(full_scope)
|
135
|
-
}
|
119
|
+
# monkey patch the resource to only show authorized records
|
120
|
+
old_records = resource.method(:records)
|
121
|
+
resource.define_singleton_method(:records) { |ctx| item[:scope].merge(old_records.call(ctx)) }
|
136
122
|
|
137
123
|
# transform sort value casing for rails
|
138
124
|
sort_criteria = query[:sort]&.map { |s| s.clone.merge(field: s[:field].underscore) }
|
139
125
|
serializer = JSONAPI::ResourceSerializer.new(resource)
|
126
|
+
|
140
127
|
processor = JSONAPI::Processor.new(resource,
|
141
128
|
:find,
|
142
129
|
filters: query[:filter] || {},
|
@@ -146,8 +133,12 @@ module DeepUnrest
|
|
146
133
|
paginator: paginator)
|
147
134
|
|
148
135
|
jsonapi_result = processor.process
|
136
|
+
|
149
137
|
resource_results = format_processor_results(resource, jsonapi_result)
|
150
138
|
|
139
|
+
# un-monkey patch the resource :records method
|
140
|
+
resource.define_singleton_method(:records, old_records)
|
141
|
+
|
151
142
|
meta << {
|
152
143
|
addr: [*addr, item[:key], 'meta'],
|
153
144
|
serialized_result: {
|
@@ -178,15 +169,9 @@ module DeepUnrest
|
|
178
169
|
included << result
|
179
170
|
recurse_included_queries(ctx, result, mappings, parent_context, included, meta, [*next_addr, :include])
|
180
171
|
end
|
181
|
-
|
172
|
+
rescue StandardError => e
|
182
173
|
# un-monkey patch the resource :records method
|
183
|
-
|
184
|
-
r_metaclass.class_eval do
|
185
|
-
alias_method :records, :records_original
|
186
|
-
end
|
187
|
-
else
|
188
|
-
r_metaclass.undef_method :records
|
189
|
-
end
|
174
|
+
resource.define_singleton_method(:records, old_records)
|
190
175
|
end
|
191
176
|
|
192
177
|
def self.get_query_type(item)
|
data/lib/deep_unrest/version.rb
CHANGED
data/lib/deep_unrest/write.rb
CHANGED
@@ -110,7 +110,7 @@ module DeepUnrest
|
|
110
110
|
update_body[:_destroy] = true if item.dig(:query, :destroy)
|
111
111
|
DeepUnrest.set_attr(memo, item[:ar_addr].clone, update_body)
|
112
112
|
if item[:ar_addr].size == 1
|
113
|
-
item[:mutate] =
|
113
|
+
item[:mutate] = update_body
|
114
114
|
item[:scope_type] = :update if item[:scope_type] == :show
|
115
115
|
end
|
116
116
|
end
|
@@ -142,9 +142,10 @@ module DeepUnrest
|
|
142
142
|
when :destroy
|
143
143
|
id = item.dig(:query, :id)
|
144
144
|
model = item[:klass].find(id)
|
145
|
+
model.deep_unrest_query_uuid = item.dig(:query, :uuid)
|
145
146
|
resource = item[:resource].new(model, context)
|
146
147
|
resource.run_callbacks :remove do
|
147
|
-
|
148
|
+
model.destroy!
|
148
149
|
end
|
149
150
|
end
|
150
151
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deep_unrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.75
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lynn Hurley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|