decidim-api 0.28.3 → 0.28.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 421212a1da0881514ffec823ebe525130b31d5e3c8e94d9d56463ad54f7081f3
4
- data.tar.gz: 593001df947aebcb777d99a65fe492e1ec7269cfd3cfaa79e4c489ed1699988e
3
+ metadata.gz: '0487271bae8055773c103959c1ff43ce4e71c40912ed2d4bb66242d51bfecc68'
4
+ data.tar.gz: ab52b494b56688ed26b84aca9489cbbcf88d1264116f38d3947396ecd2f60bfc
5
5
  SHA512:
6
- metadata.gz: bc2599a9cb051033e289d89541c00e7ce3d795314334001ab4d0839a533a952a825a9c69b7e3a953459d75f77360468a9715c60713365886d64bafd31b752c57
7
- data.tar.gz: e0e83a46ffb0a89c5f2942f6be8fb8ef5e55354361405b97e240ebc34e822fb559f2320d1b2ecb020d07b3c8d456cb1cfdb3c231515b7aeeb087cfa10799d01a
6
+ metadata.gz: 6e3cbbdf893f3357e211c9d7a7c0866330e9fc49e3a39e8c94b1066c8e6a0659aa93a08bad7d3cf5e194096bfc7a714d06d5cc453dc815fa5ce06fc727ee4030
7
+ data.tar.gz: 2b4a3b7e195512b4869b81e23c08280cd0af282556bd81f687f255637bee91644eeea374726a462a1c449618fe2b31aef249398ee3a736a9e4a652f88a2d3879
data/decidim-api.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.version = Decidim::Api.version
11
11
  s.authors = ["Josep Jaume Rey Peroy", "Marc Riera Casals", "Oriol Gual Oliva"]
12
12
  s.email = ["josepjaume@gmail.com", "mrc2407@gmail.com", "oriolgual@gmail.com"]
13
- s.license = "AGPL-3.0"
13
+ s.license = "AGPL-3.0-or-later"
14
14
  s.homepage = "https://decidim.org"
15
15
  s.metadata = {
16
16
  "bug_tracker_uri" => "https://github.com/decidim/decidim/issues",
@@ -39,6 +39,7 @@ Gem::Specification.new do |s|
39
39
  s.add_dependency "graphql-docs", "~> 3.0.1"
40
40
  s.add_dependency "rack-cors", "~> 1.0"
41
41
 
42
+ s.add_development_dependency "decidim-assemblies", Decidim::Api.version
42
43
  s.add_development_dependency "decidim-comments", Decidim::Api.version
43
44
  s.add_development_dependency "decidim-dev", Decidim::Api.version
44
45
  s.add_development_dependency "decidim-participatory_processes", Decidim::Api.version
@@ -41,3 +41,438 @@ shared_context "with a graphql decidim component" do
41
41
  )
42
42
  end
43
43
  end
44
+
45
+ shared_examples "with resource visibility" do
46
+ let(:process_space_factory) { :participatory_process }
47
+ let(:space_type) { "participatoryProcess" }
48
+
49
+ shared_examples "graphQL visible resource" do
50
+ it "is visible" do
51
+ expect(response[space_type]["components"].first[lookout_key]).to eq(query_result)
52
+ end
53
+ end
54
+
55
+ shared_examples "graphQL hidden space" do
56
+ it "should not be visible" do
57
+ expect(response[space_type]).to be_nil
58
+ end
59
+ end
60
+
61
+ shared_examples "graphQL hidden component" do
62
+ it "should not be visible" do
63
+ expect(response[space_type]["components"].first).to be_nil
64
+ end
65
+ end
66
+
67
+ shared_examples "graphQL resource visible for admin" do
68
+ context "when the user is admin" do
69
+ let!(:current_user) { create(:user, :admin, :confirmed, organization: current_organization) }
70
+
71
+ it_behaves_like "graphQL visible resource"
72
+ end
73
+ end
74
+
75
+ shared_examples "graphQL space hidden to visitor" do
76
+ context "when user is visitor" do
77
+ let!(:current_user) { nil }
78
+ it_behaves_like "graphQL hidden space"
79
+ end
80
+ end
81
+
82
+ context "when space is published" do
83
+ let!(:participatory_process) { create(process_space_factory, :published, :with_steps, organization: current_organization) }
84
+
85
+ context "when component is published" do
86
+ let!(:current_component) { create(component_factory, :published, participatory_space: participatory_process) }
87
+
88
+ it_behaves_like "graphQL resource visible for admin"
89
+
90
+ context "when the user is space admin" do
91
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
92
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "admin") }
93
+ it_behaves_like "graphQL visible resource"
94
+ end
95
+
96
+ context "when the user is space collaborator" do
97
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
98
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "collaborator") }
99
+ it_behaves_like "graphQL visible resource"
100
+ end
101
+
102
+ context "when the user is space moderator" do
103
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
104
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "moderator") }
105
+ it_behaves_like "graphQL visible resource"
106
+ end
107
+
108
+ context "when the user is space valuator" do
109
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
110
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "valuator") }
111
+ it_behaves_like "graphQL visible resource"
112
+ end
113
+
114
+ context "when user is visitor" do
115
+ let!(:current_user) { nil }
116
+ it_behaves_like "graphQL visible resource"
117
+ end
118
+
119
+ context "when user is member" do
120
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
121
+ let!(:participatory_space_private_user) { create(:participatory_space_private_user, user: current_user, privatable_to: participatory_process) }
122
+ it_behaves_like "graphQL visible resource"
123
+ end
124
+
125
+ context "when user is member" do
126
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
127
+ let!(:participatory_space_private_user) { create(:participatory_space_private_user, user: current_user, privatable_to: participatory_process) }
128
+ it_behaves_like "graphQL visible resource"
129
+ end
130
+
131
+ context "when user is normal user" do
132
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
133
+ it_behaves_like "graphQL visible resource"
134
+ end
135
+ end
136
+
137
+ context "when component is not published" do
138
+ let!(:current_component) { create(component_factory, :unpublished, participatory_space: participatory_process) }
139
+
140
+ it_behaves_like "graphQL resource visible for admin"
141
+
142
+ context "when the user is space admin" do
143
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
144
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "admin") }
145
+ it_behaves_like "graphQL visible resource"
146
+ end
147
+
148
+ context "when the user is space collaborator" do
149
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
150
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "collaborator") }
151
+ it_behaves_like "graphQL hidden component"
152
+ end
153
+
154
+ context "when the user is space moderator" do
155
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
156
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "moderator") }
157
+ it_behaves_like "graphQL hidden component"
158
+ end
159
+
160
+ context "when the user is space valuator" do
161
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
162
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "valuator") }
163
+ it_behaves_like "graphQL visible resource"
164
+ end
165
+
166
+ context "when user is visitor" do
167
+ let!(:current_user) { nil }
168
+
169
+ it_behaves_like "graphQL hidden component"
170
+ end
171
+
172
+ context "when user is normal user" do
173
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
174
+ it_behaves_like "graphQL hidden component"
175
+ end
176
+
177
+ context "when user is member" do
178
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
179
+ let!(:participatory_space_private_user) { create(:participatory_space_private_user, user: current_user, privatable_to: participatory_process) }
180
+ it_behaves_like "graphQL hidden component"
181
+ end
182
+ end
183
+ end
184
+
185
+ context "when space is published, private and transparent" do
186
+ let(:process_space_factory) { :assembly }
187
+ let(:space_type) { "assembly" }
188
+
189
+ let(:participatory_process_query) do
190
+ %(
191
+ assembly(id: #{participatory_process.id}) {
192
+ components(filter: {type: "#{component_type}"}){
193
+ id
194
+ name {
195
+ translation(locale: "#{locale}")
196
+ }
197
+ weight
198
+ __typename
199
+ ...fooComponent
200
+ }
201
+ id
202
+ }
203
+ )
204
+ end
205
+ let!(:participatory_process) { create(process_space_factory, :published, :private, :transparent, organization: current_organization) }
206
+
207
+ context "when component is published" do
208
+ let!(:current_component) { create(component_factory, :published, participatory_space: participatory_process) }
209
+
210
+ it_behaves_like "graphQL resource visible for admin"
211
+
212
+ context "when the user is space admin" do
213
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
214
+ let!(:role) { create(:assembly_user_role, assembly: participatory_process, user: current_user, role: "admin") }
215
+ it_behaves_like "graphQL visible resource"
216
+ end
217
+
218
+ context "when the user is space collaborator" do
219
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
220
+ let!(:role) { create(:assembly_user_role, assembly: participatory_process, user: current_user, role: "collaborator") }
221
+ it_behaves_like "graphQL visible resource"
222
+ end
223
+
224
+ context "when the user is space moderator" do
225
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
226
+ let!(:role) { create(:assembly_user_role, assembly: participatory_process, user: current_user, role: "moderator") }
227
+ it_behaves_like "graphQL visible resource"
228
+ end
229
+
230
+ context "when the user is space valuator" do
231
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
232
+ let!(:role) { create(:assembly_user_role, assembly: participatory_process, user: current_user, role: "valuator") }
233
+ it_behaves_like "graphQL visible resource"
234
+ end
235
+
236
+ context "when user is visitor" do
237
+ let!(:current_user) { nil }
238
+ it_behaves_like "graphQL visible resource"
239
+ end
240
+
241
+ context "when user is member" do
242
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
243
+ let!(:participatory_space_private_user) { create(:assembly_private_user, user: current_user, privatable_to: participatory_process) }
244
+ it_behaves_like "graphQL visible resource"
245
+ end
246
+
247
+ context "when user is normal user" do
248
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
249
+ it_behaves_like "graphQL visible resource"
250
+ end
251
+ end
252
+
253
+ context "when component is not published" do
254
+ let!(:current_component) { create(component_factory, :unpublished, participatory_space: participatory_process) }
255
+
256
+ it_behaves_like "graphQL resource visible for admin"
257
+
258
+ context "when the user is space admin" do
259
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
260
+ let!(:role) { create(:assembly_user_role, assembly: participatory_process, user: current_user, role: "admin") }
261
+ it_behaves_like "graphQL visible resource"
262
+ end
263
+
264
+ context "when the user is space collaborator" do
265
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
266
+ let!(:role) { create(:assembly_user_role, assembly: participatory_process, user: current_user, role: "collaborator") }
267
+ it_behaves_like "graphQL visible resource"
268
+ end
269
+
270
+ context "when the user is space moderator" do
271
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
272
+ let!(:role) { create(:assembly_user_role, assembly: participatory_process, user: current_user, role: "moderator") }
273
+ it_behaves_like "graphQL hidden component"
274
+ end
275
+
276
+ context "when the user is space valuator" do
277
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
278
+ let!(:role) { create(:assembly_user_role, assembly: participatory_process, user: current_user, role: "valuator") }
279
+ it_behaves_like "graphQL visible resource"
280
+ end
281
+
282
+ context "when user is visitor" do
283
+ let!(:current_user) { nil }
284
+ it_behaves_like "graphQL hidden component"
285
+ end
286
+
287
+ context "when user is normal user" do
288
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
289
+ it_behaves_like "graphQL hidden component"
290
+ end
291
+
292
+ context "when user is member" do
293
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
294
+ let!(:participatory_space_private_user) { create(:assembly_private_user, user: current_user, privatable_to: participatory_process) }
295
+ it_behaves_like "graphQL hidden component"
296
+ end
297
+ end
298
+ end
299
+
300
+ context "when space is published but private" do
301
+ let!(:participatory_process) { create(process_space_factory, :published, :private, :with_steps, organization: current_organization) }
302
+
303
+ context "when component is published" do
304
+ let!(:current_component) { create(component_factory, :published, participatory_space: participatory_process) }
305
+
306
+ it_behaves_like "graphQL resource visible for admin"
307
+
308
+ context "when the user is space admin" do
309
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
310
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "admin") }
311
+ it_behaves_like "graphQL hidden space"
312
+ end
313
+
314
+ context "when the user is space collaborator" do
315
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
316
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "collaborator") }
317
+ it_behaves_like "graphQL hidden space"
318
+ end
319
+
320
+ context "when the user is space moderator" do
321
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
322
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "moderator") }
323
+
324
+ it_behaves_like "graphQL hidden space"
325
+ end
326
+
327
+ context "when the user is space valuator" do
328
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
329
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "valuator") }
330
+ it_behaves_like "graphQL hidden space"
331
+ end
332
+
333
+ it_behaves_like "graphQL space hidden to visitor"
334
+
335
+ context "when user is normal user" do
336
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
337
+ it_behaves_like "graphQL hidden space"
338
+ end
339
+
340
+ context "when user is member" do
341
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
342
+ let!(:participatory_space_private_user) { create(:participatory_space_private_user, user: current_user, privatable_to: participatory_process) }
343
+ it_behaves_like "graphQL visible resource"
344
+ end
345
+ end
346
+
347
+ context "when component is not published" do
348
+ let!(:current_component) { create(component_factory, :unpublished, participatory_space: participatory_process) }
349
+
350
+ it_behaves_like "graphQL resource visible for admin"
351
+
352
+ context "when the user is space admin" do
353
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
354
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "admin") }
355
+ it_behaves_like "graphQL hidden space"
356
+ end
357
+
358
+ context "when the user is space collaborator" do
359
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
360
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "collaborator") }
361
+ it_behaves_like "graphQL hidden space"
362
+ end
363
+
364
+ context "when the user is space moderator" do
365
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
366
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "moderator") }
367
+ it_behaves_like "graphQL hidden space"
368
+ end
369
+
370
+ context "when the user is space valuator" do
371
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
372
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "valuator") }
373
+ it_behaves_like "graphQL hidden space"
374
+ end
375
+ it_behaves_like "graphQL space hidden to visitor"
376
+
377
+ context "when user is member" do
378
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
379
+ let!(:participatory_space_private_user) { create(:participatory_space_private_user, user: current_user, privatable_to: participatory_process) }
380
+ it_behaves_like "graphQL hidden component"
381
+ end
382
+ context "when user is normal user" do
383
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
384
+ it_behaves_like "graphQL hidden space"
385
+ end
386
+ end
387
+ end
388
+
389
+ context "when space is unpublished" do
390
+ let(:participatory_process) { create(process_space_factory, :unpublished, :with_steps, organization: current_organization) }
391
+
392
+ context "when component is published" do
393
+ let!(:current_component) { create(component_factory, :published, participatory_space: participatory_process) }
394
+
395
+ it_behaves_like "graphQL resource visible for admin"
396
+
397
+ context "when the user is space admin" do
398
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
399
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "admin") }
400
+ it_behaves_like "graphQL hidden space"
401
+ end
402
+
403
+ context "when the user is space collaborator" do
404
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
405
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "collaborator") }
406
+ it_behaves_like "graphQL hidden space"
407
+ end
408
+
409
+ context "when the user is space moderator" do
410
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
411
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "moderator") }
412
+ it_behaves_like "graphQL hidden space"
413
+ end
414
+
415
+ context "when the user is space valuator" do
416
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
417
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "valuator") }
418
+ it_behaves_like "graphQL hidden space"
419
+ end
420
+
421
+ it_behaves_like "graphQL space hidden to visitor"
422
+
423
+ context "when user is member" do
424
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
425
+ let!(:participatory_space_private_user) { create(:participatory_space_private_user, user: current_user, privatable_to: participatory_process) }
426
+ it_behaves_like "graphQL hidden space"
427
+ end
428
+
429
+ context "when user is normal user" do
430
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
431
+ it_behaves_like "graphQL hidden space"
432
+ end
433
+ end
434
+
435
+ context "when component is not published" do
436
+ let!(:current_component) { create(component_factory, :unpublished, participatory_space: participatory_process) }
437
+
438
+ it_behaves_like "graphQL resource visible for admin"
439
+
440
+ context "when the user is space admin" do
441
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
442
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "admin") }
443
+ it_behaves_like "graphQL hidden space"
444
+ end
445
+
446
+ context "when the user is space collaborator" do
447
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
448
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "collaborator") }
449
+ it_behaves_like "graphQL hidden space"
450
+ end
451
+
452
+ context "when the user is space moderator" do
453
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
454
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "moderator") }
455
+ it_behaves_like "graphQL hidden space"
456
+ end
457
+
458
+ context "when the user is space valuator" do
459
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
460
+ let!(:role) { create(:participatory_process_user_role, participatory_process:, user: current_user, role: "valuator") }
461
+ it_behaves_like "graphQL hidden space"
462
+ end
463
+ it_behaves_like "graphQL space hidden to visitor"
464
+
465
+ context "when user is member" do
466
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
467
+ let!(:participatory_space_private_user) { create(:participatory_space_private_user, user: current_user, privatable_to: participatory_process) }
468
+ it_behaves_like "graphQL hidden space"
469
+ end
470
+
471
+ context "when user is normal user" do
472
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
473
+
474
+ it_behaves_like "graphQL hidden space"
475
+ end
476
+ end
477
+ end
478
+ end
@@ -2,7 +2,8 @@
2
2
 
3
3
  shared_context "with a graphql class type" do
4
4
  let!(:current_organization) { create(:organization) }
5
- let!(:current_user) { create(:user, organization: current_organization) }
5
+ let!(:current_user) { create(:user, :confirmed, organization: current_organization) }
6
+ let!(:current_component) { create(:component) }
6
7
  let(:model) { OpenStruct.new({}) }
7
8
  let(:type_class) { described_class }
8
9
  let(:variables) { {} }
@@ -5,6 +5,76 @@ module Decidim
5
5
  module Types
6
6
  class BaseObject < GraphQL::Schema::Object
7
7
  field_class Types::BaseField
8
+
9
+ def self.authorized?(object, context)
10
+ chain = []
11
+
12
+ subject = determine_subject_name(object)
13
+ context[subject] = object
14
+
15
+ chain.unshift(allowed_to?(:read, :participatory_space, object, context)) if object.respond_to?(:participatory_space)
16
+ chain.unshift(allowed_to?(:read, :component, object, context)) if object.respond_to?(:component) && object.component.present?
17
+
18
+ super && chain.all?
19
+ end
20
+
21
+ def self.determine_subject_name(object)
22
+ object.class.name.split("::").last.underscore.to_sym
23
+ end
24
+
25
+ # This is a simplified adaptation of allowed_to? from NeedsPermission concern
26
+ # @param action [Symbol] The action performed. Most cases the action is :read
27
+ # @param subject [Object] The name of the subject. Ex: :participatory_space, :component, or object
28
+ # @param object [ActiveModel::Base] The object that is being represented.
29
+ # @param context [GraphQL::Query::Context] The GraphQL context
30
+ #
31
+ # @return Boolean
32
+ def self.allowed_to?(action, subject, object, context)
33
+ unless subject.is_a?(::Symbol)
34
+ subject = determine_subject_name(object)
35
+ context[subject] = object
36
+ end
37
+
38
+ permission_action = Decidim::PermissionAction.new(scope: :public, action:, subject:)
39
+
40
+ permission_chain(object).inject(permission_action) do |current_permission_action, permission_class|
41
+ permission_class.new(
42
+ context[:current_user],
43
+ current_permission_action,
44
+ local_context(object, context)
45
+ ).permissions
46
+ end.allowed?
47
+ end
48
+
49
+ # Injects into context object current_participatory_space and current_component keys as they are needed
50
+ #
51
+ # @param object [ActiveModel::Base] The object that is being represented.
52
+ # @param context [GraphQL::Query::Context] The GraphQL context
53
+ #
54
+ # @return Hash
55
+ def self.local_context(object, context)
56
+ context[:current_participatory_space] = object.participatory_space if object.respond_to?(:participatory_space)
57
+ context[:current_component] = object.component if object.respond_to?(:component) && object.component.present?
58
+
59
+ context.to_h
60
+ end
61
+
62
+ # Creates the permission chain arrau that contains all the permission classes required to authorize a certain resource
63
+ # We are using unshift as we need the Admin and base permissions to be last in the chain
64
+ # @param object [ActiveModel::Base] The object that is being represented.
65
+ #
66
+ # @return [Decidim::DefaultPermissions]
67
+ def self.permission_chain(object)
68
+ permissions = [
69
+ Decidim::Admin::Permissions,
70
+ Decidim::Permissions
71
+ ]
72
+
73
+ permissions.unshift(object.participatory_space.manifest.permissions_class) if object.respond_to?(:participatory_space)
74
+ permissions.unshift(object.component.manifest.permissions_class) if object.respond_to?(:component) && object.component.present?
75
+
76
+ permissions
77
+ end
8
78
  end
9
79
  end
10
80
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-api version.
5
5
  module Api
6
6
  def self.version
7
- "0.28.3"
7
+ "0.28.5"
8
8
  end
9
9
  end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.3
4
+ version: 0.28.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-09-10 00:00:00.000000000 Z
13
+ date: 2025-02-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: commonmarker
@@ -38,14 +38,14 @@ dependencies:
38
38
  requirements:
39
39
  - - '='
40
40
  - !ruby/object:Gem::Version
41
- version: 0.28.3
41
+ version: 0.28.5
42
42
  type: :runtime
43
43
  prerelease: false
44
44
  version_requirements: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - '='
47
47
  - !ruby/object:Gem::Version
48
- version: 0.28.3
48
+ version: 0.28.5
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: graphql
51
51
  requirement: !ruby/object:Gem::Requirement
@@ -88,48 +88,62 @@ dependencies:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
90
  version: '1.0'
91
+ - !ruby/object:Gem::Dependency
92
+ name: decidim-assemblies
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '='
96
+ - !ruby/object:Gem::Version
97
+ version: 0.28.5
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '='
103
+ - !ruby/object:Gem::Version
104
+ version: 0.28.5
91
105
  - !ruby/object:Gem::Dependency
92
106
  name: decidim-comments
93
107
  requirement: !ruby/object:Gem::Requirement
94
108
  requirements:
95
109
  - - '='
96
110
  - !ruby/object:Gem::Version
97
- version: 0.28.3
111
+ version: 0.28.5
98
112
  type: :development
99
113
  prerelease: false
100
114
  version_requirements: !ruby/object:Gem::Requirement
101
115
  requirements:
102
116
  - - '='
103
117
  - !ruby/object:Gem::Version
104
- version: 0.28.3
118
+ version: 0.28.5
105
119
  - !ruby/object:Gem::Dependency
106
120
  name: decidim-dev
107
121
  requirement: !ruby/object:Gem::Requirement
108
122
  requirements:
109
123
  - - '='
110
124
  - !ruby/object:Gem::Version
111
- version: 0.28.3
125
+ version: 0.28.5
112
126
  type: :development
113
127
  prerelease: false
114
128
  version_requirements: !ruby/object:Gem::Requirement
115
129
  requirements:
116
130
  - - '='
117
131
  - !ruby/object:Gem::Version
118
- version: 0.28.3
132
+ version: 0.28.5
119
133
  - !ruby/object:Gem::Dependency
120
134
  name: decidim-participatory_processes
121
135
  requirement: !ruby/object:Gem::Requirement
122
136
  requirements:
123
137
  - - '='
124
138
  - !ruby/object:Gem::Version
125
- version: 0.28.3
139
+ version: 0.28.5
126
140
  type: :development
127
141
  prerelease: false
128
142
  version_requirements: !ruby/object:Gem::Requirement
129
143
  requirements:
130
144
  - - '='
131
145
  - !ruby/object:Gem::Version
132
- version: 0.28.3
146
+ version: 0.28.5
133
147
  description: API engine for decidim
134
148
  email:
135
149
  - josepjaume@gmail.com
@@ -182,7 +196,7 @@ files:
182
196
  - lib/tasks/decidim_api_docs.rake
183
197
  homepage: https://decidim.org
184
198
  licenses:
185
- - AGPL-3.0
199
+ - AGPL-3.0-or-later
186
200
  metadata:
187
201
  bug_tracker_uri: https://github.com/decidim/decidim/issues
188
202
  documentation_uri: https://docs.decidim.org/