forest_liana 8.0.0.beta.2 → 8.0.0.beta.4

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: 8c3bc9feb8975c2d4bb725c5badda68b4d880fcc3a2553cc2d1d6164f5e56366
4
- data.tar.gz: b1f6e70a0723450674b53944f933036fea21b4a9b6cceab806cf32cd7654896a
3
+ metadata.gz: 83e541b62689b763990ff3d940c44bcfd339ffa1b0447e023664b99dda8f54da
4
+ data.tar.gz: eea162587eafe0cc4cdd2f3f843418b3d71ac4adcab9c96deddd9b6c389de4a8
5
5
  SHA512:
6
- metadata.gz: 42a2ae2c6800ea8cf501ee3896554852cd677003d2aea5353fbc2d74d5dee34ee55d02079f8a9a31949af19d7a6ecc8c97e8be3a15a9844aa2ae11ff2fb75e73
7
- data.tar.gz: 2a97e185ccde89910027740ea833a8e3373f4cb2466a16c2023554534be4ddc3c2419d40015be0edbecb6283a304d4ef4b80472fcea98b99649a122b28fb9c2e
6
+ metadata.gz: 299125cff69b0900bee3bf03bc47cf081cd0c8ef2e1490a8e3dd3391c52beac2434f3282d9958d10beeb4929fcc47628e40a4dbc5237203a6371ff51898da809
7
+ data.tar.gz: 5a260f17aeb453ba495de4f02c21b6fef1b18dd05fd073e2969d2cdca2fc2eb8dc11dfef161b382e38c46285efb8185429522ddeef8ff157e814fca740d4daad
@@ -5,20 +5,19 @@ module ForestLiana
5
5
  rescue_from ForestLiana::Ability::Exceptions::ActionConditionError, with: :render_error
6
6
  include ForestLiana::Ability
7
7
  if Rails::VERSION::MAJOR < 4
8
- before_filter :smart_action_pre_perform_checks
8
+ before_filter :get_smart_action_request
9
+ before_filter :find_resource
10
+ before_filter :check_permission_for_smart_route
11
+ before_filter :ensure_record_ids_in_scope
9
12
  else
10
- before_action :smart_action_pre_perform_checks
13
+ before_action :get_smart_action_request
14
+ before_action :find_resource
15
+ before_action :check_permission_for_smart_route
16
+ before_action :ensure_record_ids_in_scope
11
17
  end
12
18
 
13
19
  private
14
20
 
15
- def smart_action_pre_perform_checks
16
- get_smart_action_request
17
- find_resource
18
- check_permission_for_smart_route
19
- ensure_record_ids_in_scope
20
- end
21
-
22
21
  def get_smart_action_request
23
22
  begin
24
23
  params[:data][:attributes]
@@ -31,18 +30,11 @@ module ForestLiana
31
30
  end
32
31
 
33
32
  def find_resource
34
- begin
35
33
  @resource = SchemaUtils.find_model_from_collection_name(@parameters[:data][:attributes][:collection_name])
36
- if @resource.nil? || !SchemaUtils.model_included?(@resource) ||
37
- !@resource.ancestors.include?(ActiveRecord::Base)
38
- render serializer: nil, json: { status: 404 }, status: :not_found
34
+ if @resource.nil? || !SchemaUtils.model_included?(@resource) || !@resource.ancestors.include?(ActiveRecord::Base)
35
+ raise ForestLiana::Errors::HTTP422Error.new('The conditional smart actions are not supported with Smart Collection. Please contact an administrator.')
39
36
  end
40
37
  @resource
41
- rescue => error
42
- FOREST_REPORTER.report error
43
- FOREST_LOGGER.error "Find Collection error: #{error}\n#{format_stacktrace(error)}"
44
- render serializer: nil, json: { status: 404 }, status: :not_found
45
- end
46
38
  end
47
39
 
48
40
  def check_permission_for_smart_route
@@ -37,6 +37,8 @@ module ForestLiana
37
37
  elsif @smart_action['approvalRequired'].include?(@user['roleId'])
38
38
  if @smart_action['approvalRequiredConditions'].empty? || match_conditions('approvalRequiredConditions')
39
39
  raise ForestLiana::Ability::Exceptions::RequireApproval.new(@smart_action['userApprovalEnabled'])
40
+ else
41
+ return true if @smart_action['triggerConditions'].empty? || match_conditions('triggerConditions')
40
42
  end
41
43
  end
42
44
 
@@ -7,18 +7,27 @@ module ForestLiana
7
7
  def forest_authorize!(action, user, collection, args = {})
8
8
  case action
9
9
  when 'browse', 'read', 'edit', 'add', 'delete', 'export'
10
- raise ForestLiana::Ability::Exceptions::AccessDenied.new unless is_crud_authorized?(action, user, collection)
10
+ raise ForestLiana::Ability::Exceptions::AccessDenied.new unless is_crud_authorized?(action, user, collection)
11
11
  when 'chart'
12
- if ALLOWED_PERMISSION_LEVELS.exclude?(user['permission_level'])
13
- raise ForestLiana::Errors::HTTP422Error.new('The argument parameters is missing') if args[:parameters].nil?
14
- raise ForestLiana::Ability::Exceptions::AccessDenied.new unless is_chart_authorized?(user, args[:parameters])
15
- end
12
+ if ALLOWED_PERMISSION_LEVELS.exclude?(user['permission_level'])
13
+ raise ForestLiana::Errors::HTTP422Error.new('The argument parameters is missing') if args[:parameters].nil?
14
+ raise ForestLiana::Ability::Exceptions::AccessDenied.new unless is_chart_authorized?(user, args[:parameters])
15
+ end
16
16
  when 'action'
17
- raise ForestLiana::Errors::HTTP422Error.new('You must implement the arguments : parameters, endpoint & http_method') if args[:parameters].nil? || args[:endpoint].nil? || args[:http_method].nil?
18
- is_smart_action_authorized?(user, collection, args[:parameters], args[:endpoint], args[:http_method])
17
+ validate_collection collection
18
+ raise ForestLiana::Errors::HTTP422Error.new('You must implement the arguments : parameters, endpoint & http_method') if args[:parameters].nil? || args[:endpoint].nil? || args[:http_method].nil?
19
+ is_smart_action_authorized?(user, collection, args[:parameters], args[:endpoint], args[:http_method])
19
20
  else
20
21
  raise ForestLiana::Ability::Exceptions::AccessDenied.new
21
22
  end
22
23
  end
24
+
25
+ private
26
+
27
+ def validate_collection(collection)
28
+ if collection.nil? || !SchemaUtils.model_included?(collection)
29
+ raise ForestLiana::Errors::HTTP422Error.new('The conditional smart actions are not supported with Smart Collection. Please contact an administrator.')
30
+ end
31
+ end
23
32
  end
24
33
  end
@@ -32,7 +32,6 @@ module ForestLiana
32
32
 
33
33
  def self.find_model_from_collection_name(collection_name, logs = false)
34
34
  model_found = nil
35
-
36
35
  ForestLiana.models.each do |model|
37
36
  if model.abstract_class?
38
37
  model_found = self.find_model_from_abstract_class(model, collection_name)
@@ -1,3 +1,3 @@
1
1
  module ForestLiana
2
- VERSION = "8.0.0.beta.2"
2
+ VERSION = "8.0.0.beta.4"
3
3
  end
@@ -42,6 +42,14 @@ module ForestLiana
42
42
  user['permission_level'] = 'admin'
43
43
  expect(dummy_class.forest_authorize!('chart', user, Island.first, {parameters: []})).to equal nil
44
44
  end
45
+
46
+ it 'should raise error 422 when the collection is nil on action ability' do
47
+ expect { dummy_class.forest_authorize!('action', :user, nil) }.to raise_error(ForestLiana::Errors::HTTP422Error, "The conditional smart actions are not supported with Smart Collection. Please contact an administrator.")
48
+ end
49
+
50
+ it 'should raise error 422 when the collection is not a ActiveRecord children on action ability' do
51
+ expect { dummy_class.forest_authorize!('action', :user, class Example; end ) }.to raise_error(ForestLiana::Errors::HTTP422Error, "The conditional smart actions are not supported with Smart Collection. Please contact an administrator.")
52
+ end
45
53
  end
46
54
  end
47
55
  end
@@ -205,9 +205,67 @@ module ForestLiana
205
205
  expect{smart_action_checker.can_execute?}.to raise_error(ForestLiana::Ability::Exceptions::TriggerForbidden)
206
206
  end
207
207
 
208
- it 'should raise error when triggerConditions not match' do
208
+ it 'should trigger action when approvalRequiredCondition not match but with triggerConditions matched' do
209
+ parameters = ActionController::Parameters.new(params).permit!
210
+ action['approvalRequired'] = [1]
211
+ action['triggerEnabled'] = [1]
212
+ action['triggerConditions'] = [
213
+ { 'filter' =>
214
+ { 'aggregator' => 'and',
215
+ 'conditions' =>
216
+ [
217
+ {
218
+ 'field' => 'name',
219
+ 'value' => 'foo',
220
+ 'source' => 'data',
221
+ 'operator' => 'equal'
222
+ }
223
+ ]
224
+ },
225
+ 'roleId' => 1
226
+ }
227
+ ]
228
+ action['approvalRequiredConditions'] = [
229
+ { 'filter' =>
230
+ { 'aggregator' => 'and',
231
+ 'conditions' =>
232
+ [
233
+ {
234
+ 'field' => 'name',
235
+ 'value' => 'fake island',
236
+ 'source' => 'data',
237
+ 'operator' => 'equal'
238
+ }
239
+ ]
240
+ },
241
+ 'roleId' => 1
242
+ }
243
+ ]
244
+ smart_action_checker = ForestLiana::Ability::Permission::SmartActionChecker.new(parameters, Island, action, user)
245
+
246
+ expect(smart_action_checker.can_execute?).to equal true
247
+ end
248
+
249
+ it 'should raise error when approvalRequiredConditions and triggerConditions not match' do
209
250
  parameters = ActionController::Parameters.new(params).permit!
210
251
  action['approvalRequired'] = [1]
252
+ action['triggerEnabled'] = [1]
253
+ action['triggerConditions'] = [
254
+ { 'filter' =>
255
+ { 'aggregator' => 'and',
256
+ 'conditions' =>
257
+ [
258
+ {
259
+ 'field' => 'name',
260
+ 'value' => 'fake island',
261
+ 'source' => 'data',
262
+ 'operator' => 'equal'
263
+ }
264
+ ]
265
+ },
266
+ 'roleId' => 1
267
+ }
268
+ ]
211
269
  action['approvalRequiredConditions'] = [
212
270
  { 'filter' =>
213
271
  { 'aggregator' => 'and',
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_liana
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.0.beta.2
4
+ version: 8.0.0.beta.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sandro Munda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-21 00:00:00.000000000 Z
11
+ date: 2023-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails