forest_liana 7.0.0.beta.4 → 7.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/forest_liana/actions_controller.rb +2 -2
- data/app/controllers/forest_liana/associations_controller.rb +2 -2
- data/app/controllers/forest_liana/resources_controller.rb +15 -6
- data/app/controllers/forest_liana/scopes_controller.rb +20 -0
- data/app/controllers/forest_liana/smart_actions_controller.rb +39 -3
- data/app/controllers/forest_liana/stats_controller.rb +5 -5
- data/app/services/forest_liana/filters_parser.rb +25 -9
- data/app/services/forest_liana/has_many_dissociator.rb +2 -2
- data/app/services/forest_liana/has_many_getter.rb +2 -2
- data/app/services/forest_liana/leaderboard_stat_getter.rb +20 -14
- data/app/services/forest_liana/line_stat_getter.rb +4 -2
- data/app/services/forest_liana/permissions_checker.rb +3 -4
- data/app/services/forest_liana/permissions_getter.rb +2 -2
- data/app/services/forest_liana/pie_stat_getter.rb +6 -3
- data/app/services/forest_liana/resource_getter.rb +6 -3
- data/app/services/forest_liana/resource_updater.rb +5 -2
- data/app/services/forest_liana/resources_getter.rb +6 -5
- data/app/services/forest_liana/scope_manager.rb +102 -0
- data/app/services/forest_liana/search_query_builder.rb +6 -3
- data/app/services/forest_liana/stat_getter.rb +2 -1
- data/app/services/forest_liana/value_stat_getter.rb +4 -2
- data/config/routes.rb +3 -0
- data/lib/forest_liana/version.rb +1 -1
- data/spec/dummy/app/controllers/forest/islands_controller.rb +5 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/lib/forest_liana/collections/island.rb +7 -0
- data/spec/requests/actions_controller_spec.rb +100 -12
- data/spec/requests/resources_spec.rb +2 -0
- data/spec/services/forest_liana/filters_parser_spec.rb +27 -1
- data/spec/services/forest_liana/has_many_getter_spec.rb +116 -0
- data/spec/services/forest_liana/line_stat_getter_spec.rb +14 -6
- data/spec/services/forest_liana/permissions_checker_acl_disabled_spec.rb +1 -3
- data/spec/services/forest_liana/pie_stat_getter_spec.rb +114 -0
- data/spec/services/forest_liana/resource_updater_spec.rb +116 -0
- data/spec/services/forest_liana/resources_getter_spec.rb +68 -1
- data/spec/services/forest_liana/scope_manager_spec.rb +232 -0
- data/spec/services/forest_liana/value_stat_getter_spec.rb +96 -0
- metadata +20 -15
- data/app/services/forest_liana/scope_validator.rb +0 -98
- data/test/services/forest_liana/has_many_getter_test.rb +0 -75
- data/test/services/forest_liana/pie_stat_getter_test.rb +0 -29
- data/test/services/forest_liana/resource_updater_test.rb +0 -86
- data/test/services/forest_liana/scope_validator_test.rb +0 -185
- data/test/services/forest_liana/value_stat_getter_test.rb +0 -71
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66ccf63de4bb8113b724cd22c63957431d50f53b5b5db53d1f48c8d9aa2e6b06
|
4
|
+
data.tar.gz: 134e434c2ad58ba2fa80253625e770b1b0c541f33784c9f184d666c14a75c77a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e45967d23524fa78600a52fbe2407d7c076cb3fea24d89c4705ca22ba9836cad534eeafc0a506e061279b57fb3529069f2ffe64c1d3c1a63ca44296e41f63db1
|
7
|
+
data.tar.gz: afc9d99afc6d83b3fed291fd9ccf508104bb30c0631506f174a367e1a762868fc2568fb42369b141b28c47b72c9b774a2068aad38ed5d3523497f1babb244501
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
|
-
class ActionsController <
|
2
|
+
class ActionsController < ApplicationController
|
3
3
|
|
4
4
|
def get_smart_action_hook_request
|
5
5
|
begin
|
@@ -17,7 +17,7 @@ module ForestLiana
|
|
17
17
|
def get_action(collection_name)
|
18
18
|
collection = get_collection(collection_name)
|
19
19
|
begin
|
20
|
-
|
20
|
+
collection.actions.find {|action| ActiveSupport::Inflector.parameterize(action.name) == params[:action_name]}
|
21
21
|
rescue => error
|
22
22
|
FOREST_LOGGER.error "Smart Action get action retrieval error: #{error}"
|
23
23
|
nil
|
@@ -10,7 +10,7 @@ module ForestLiana
|
|
10
10
|
|
11
11
|
def index
|
12
12
|
begin
|
13
|
-
getter = HasManyGetter.new(@resource, @association, params)
|
13
|
+
getter = HasManyGetter.new(@resource, @association, params, forest_user)
|
14
14
|
getter.perform
|
15
15
|
|
16
16
|
respond_to do |format|
|
@@ -25,7 +25,7 @@ module ForestLiana
|
|
25
25
|
|
26
26
|
def count
|
27
27
|
begin
|
28
|
-
getter = HasManyGetter.new(@resource, @association, params)
|
28
|
+
getter = HasManyGetter.new(@resource, @association, params, forest_user)
|
29
29
|
getter.count
|
30
30
|
|
31
31
|
render serializer: nil, json: { count: getter.records_count }
|
@@ -29,7 +29,7 @@ module ForestLiana
|
|
29
29
|
return head :forbidden unless checker.is_authorized?
|
30
30
|
end
|
31
31
|
|
32
|
-
getter = ForestLiana::ResourcesGetter.new(@resource, params)
|
32
|
+
getter = ForestLiana::ResourcesGetter.new(@resource, params, forest_user)
|
33
33
|
getter.perform
|
34
34
|
|
35
35
|
respond_to do |format|
|
@@ -63,7 +63,7 @@ module ForestLiana
|
|
63
63
|
)
|
64
64
|
return head :forbidden unless checker.is_authorized?
|
65
65
|
|
66
|
-
getter = ForestLiana::ResourcesGetter.new(@resource, params)
|
66
|
+
getter = ForestLiana::ResourcesGetter.new(@resource, params, forest_user)
|
67
67
|
getter.count
|
68
68
|
|
69
69
|
render serializer: nil, json: { count: getter.records_count }
|
@@ -89,10 +89,12 @@ module ForestLiana
|
|
89
89
|
checker = ForestLiana::PermissionsChecker.new(@resource, 'readEnabled', @rendering_id, user_id: forest_user['id'])
|
90
90
|
return head :forbidden unless checker.is_authorized?
|
91
91
|
|
92
|
-
getter = ForestLiana::ResourceGetter.new(@resource, params)
|
92
|
+
getter = ForestLiana::ResourceGetter.new(@resource, params, forest_user)
|
93
93
|
getter.perform
|
94
94
|
|
95
95
|
render serializer: nil, json: render_record_jsonapi(getter.record)
|
96
|
+
rescue ActiveRecord::RecordNotFound
|
97
|
+
render serializer: nil, json: { status: 404 }, status: :not_found
|
96
98
|
rescue => error
|
97
99
|
FOREST_LOGGER.error "Record Show error: #{error}\n#{format_stacktrace(error)}"
|
98
100
|
internal_server_error
|
@@ -127,7 +129,7 @@ module ForestLiana
|
|
127
129
|
checker = ForestLiana::PermissionsChecker.new(@resource, 'editEnabled', @rendering_id, user_id: forest_user['id'])
|
128
130
|
return head :forbidden unless checker.is_authorized?
|
129
131
|
|
130
|
-
updater = ForestLiana::ResourceUpdater.new(@resource, params)
|
132
|
+
updater = ForestLiana::ResourceUpdater.new(@resource, params, forest_user)
|
131
133
|
updater.perform
|
132
134
|
|
133
135
|
if updater.errors
|
@@ -149,7 +151,14 @@ module ForestLiana
|
|
149
151
|
checker = ForestLiana::PermissionsChecker.new(@resource, 'deleteEnabled', @rendering_id, user_id: forest_user['id'])
|
150
152
|
return head :forbidden unless checker.is_authorized?
|
151
153
|
|
152
|
-
|
154
|
+
collection_name = ForestLiana.name_for(@resource)
|
155
|
+
scoped_records = ForestLiana::ScopeManager.apply_scopes_on_records(@resource, forest_user, collection_name, params[:timezone])
|
156
|
+
|
157
|
+
unless scoped_records.exists?(params[:id])
|
158
|
+
return render serializer: nil, json: { status: 404 }, status: :not_found
|
159
|
+
end
|
160
|
+
|
161
|
+
scoped_records.destroy(params[:id])
|
153
162
|
|
154
163
|
head :no_content
|
155
164
|
rescue => error
|
@@ -161,7 +170,7 @@ module ForestLiana
|
|
161
170
|
checker = ForestLiana::PermissionsChecker.new(@resource, 'deleteEnabled', @rendering_id, user_id: forest_user['id'])
|
162
171
|
return head :forbidden unless checker.is_authorized?
|
163
172
|
|
164
|
-
ids = ForestLiana::ResourcesGetter.get_ids_from_request(params)
|
173
|
+
ids = ForestLiana::ResourcesGetter.get_ids_from_request(params, forest_user)
|
165
174
|
@resource.destroy(ids) if ids&.any?
|
166
175
|
|
167
176
|
head :no_content
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ForestLiana
|
2
|
+
class ScopesController < ForestLiana::ApplicationController
|
3
|
+
def invalidate_scope_cache
|
4
|
+
begin
|
5
|
+
rendering_id = params[:renderingId]
|
6
|
+
|
7
|
+
unless rendering_id
|
8
|
+
FOREST_LOGGER.error 'Missing renderingId'
|
9
|
+
return render serializer: nil, json: { status: 400 }, status: :bad_request
|
10
|
+
end
|
11
|
+
|
12
|
+
ForestLiana::ScopeManager.invalidate_scope_cache(rendering_id)
|
13
|
+
return render serializer: nil, json: { status: 200 }, status: :ok
|
14
|
+
rescue => error
|
15
|
+
FOREST_LOGGER.error "Error during scope cache invalidation: #{error.message}"
|
16
|
+
render serializer: nil, json: {status: 500 }, status: :internal_server_error
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module ForestLiana
|
2
2
|
class SmartActionsController < ForestLiana::ApplicationController
|
3
3
|
if Rails::VERSION::MAJOR < 4
|
4
|
-
before_filter :
|
4
|
+
before_filter :smart_action_pre_perform_checks
|
5
5
|
else
|
6
|
-
before_action :
|
6
|
+
before_action :smart_action_pre_perform_checks
|
7
7
|
end
|
8
8
|
|
9
9
|
private
|
@@ -17,6 +17,41 @@ module ForestLiana
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
def smart_action_pre_perform_checks
|
21
|
+
check_permission_for_smart_route
|
22
|
+
ensure_record_ids_in_scope
|
23
|
+
end
|
24
|
+
|
25
|
+
def ensure_record_ids_in_scope
|
26
|
+
begin
|
27
|
+
attributes = get_smart_action_request
|
28
|
+
|
29
|
+
# if performing a `selectAll` let the `get_ids_from_request` handle the scopes
|
30
|
+
return if attributes[:all_records]
|
31
|
+
|
32
|
+
resource = find_resource(attributes[:collection_name])
|
33
|
+
|
34
|
+
# user is using the composite_primary_keys gem
|
35
|
+
if resource.primary_key.kind_of?(Array)
|
36
|
+
# TODO: handle primary keys
|
37
|
+
return
|
38
|
+
end
|
39
|
+
|
40
|
+
filter = JSON.generate({ 'field' => resource.primary_key, 'operator' => 'in', 'value' => attributes[:ids] })
|
41
|
+
|
42
|
+
resources_getter = ForestLiana::ResourcesGetter.new(resource, { :filters => filter, :timezone => attributes[:timezone] }, forest_user)
|
43
|
+
|
44
|
+
# resources getter will return records inside the scope. if the length differs then ids are out of scope
|
45
|
+
return if resources_getter.count == attributes[:ids].length
|
46
|
+
|
47
|
+
# target records are out of scope
|
48
|
+
render serializer: nil, json: { error: 'Smart Action: target record not found' }, status: :bad_request
|
49
|
+
rescue => error
|
50
|
+
FOREST_LOGGER.error "Smart Action: #{error}\n#{format_stacktrace(error)}"
|
51
|
+
render serializer: nil, json: { error: 'Smart Action: failed to evaluate permissions' }, status: :internal_server_error
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
20
55
|
def check_permission_for_smart_route
|
21
56
|
begin
|
22
57
|
|
@@ -58,7 +93,8 @@ module ForestLiana
|
|
58
93
|
# smart action permissions are retrieved from the action's endpoint and http_method
|
59
94
|
def get_smart_action_request_info
|
60
95
|
{
|
61
|
-
endpoint
|
96
|
+
# trim query params to get the endpoint
|
97
|
+
endpoint: request.fullpath.split('?').first,
|
62
98
|
http_method: request.request_method
|
63
99
|
}
|
64
100
|
end
|
@@ -27,15 +27,15 @@ module ForestLiana
|
|
27
27
|
def get
|
28
28
|
case params[:type]
|
29
29
|
when CHART_TYPE_VALUE
|
30
|
-
stat = ValueStatGetter.new(@resource, params)
|
30
|
+
stat = ValueStatGetter.new(@resource, params, forest_user)
|
31
31
|
when CHART_TYPE_PIE
|
32
|
-
stat = PieStatGetter.new(@resource, params)
|
32
|
+
stat = PieStatGetter.new(@resource, params, forest_user)
|
33
33
|
when CHART_TYPE_LINE
|
34
|
-
stat = LineStatGetter.new(@resource, params)
|
34
|
+
stat = LineStatGetter.new(@resource, params, forest_user)
|
35
35
|
when CHART_TYPE_OBJECTIVE
|
36
|
-
stat = ObjectiveStatGetter.new(@resource, params)
|
36
|
+
stat = ObjectiveStatGetter.new(@resource, params, forest_user)
|
37
37
|
when CHART_TYPE_LEADERBOARD
|
38
|
-
stat = LeaderboardStatGetter.new(@resource, params)
|
38
|
+
stat = LeaderboardStatGetter.new(@resource, params, forest_user)
|
39
39
|
end
|
40
40
|
|
41
41
|
stat.perform
|
@@ -109,14 +109,7 @@ module ForestLiana
|
|
109
109
|
parsed_value = parse_value(operator, value)
|
110
110
|
field_and_operator = "#{parsed_field} #{parsed_operator}"
|
111
111
|
|
112
|
-
|
113
|
-
"#{field_and_operator} #{ActiveRecord::Base.sanitize(parsed_value)}"
|
114
|
-
# NOTICE: sanitize method as been removed in Rails 5.1 and sanitize_sql introduced in Rails 5.2.
|
115
|
-
elsif Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 1
|
116
|
-
"#{field_and_operator} #{ActiveRecord::Base.connection.quote(parsed_value)}"
|
117
|
-
else
|
118
|
-
ActiveRecord::Base.sanitize_sql(["#{field_and_operator} ?", parsed_value])
|
119
|
-
end
|
112
|
+
sanitize_condition(field_and_operator, operator, parsed_value)
|
120
113
|
end
|
121
114
|
|
122
115
|
def parse_aggregation_operator(aggregator_operator)
|
@@ -147,6 +140,8 @@ module ForestLiana
|
|
147
140
|
'IS'
|
148
141
|
when 'present'
|
149
142
|
'IS NOT'
|
143
|
+
when 'in'
|
144
|
+
'IN'
|
150
145
|
else
|
151
146
|
raise_unknown_operator_error(operator)
|
152
147
|
end
|
@@ -154,7 +149,7 @@ module ForestLiana
|
|
154
149
|
|
155
150
|
def parse_value(operator, value)
|
156
151
|
case operator
|
157
|
-
when 'not', 'greater_than', 'less_than', 'not_equal', 'equal', 'before', 'after'
|
152
|
+
when 'not', 'greater_than', 'less_than', 'not_equal', 'equal', 'before', 'after', 'in'
|
158
153
|
value
|
159
154
|
when 'contains', 'not_contains'
|
160
155
|
"%#{value}%"
|
@@ -292,5 +287,26 @@ module ForestLiana
|
|
292
287
|
raise ForestLiana::Errors::HTTP422Error.new('Invalid condition format')
|
293
288
|
end
|
294
289
|
end
|
290
|
+
|
291
|
+
private
|
292
|
+
|
293
|
+
def prepare_value_for_operator(operator, value)
|
294
|
+
# parenthesis around the parsed_value are required to make the `IN` operator work
|
295
|
+
operator == 'in' ? "(#{value})" : value
|
296
|
+
end
|
297
|
+
|
298
|
+
def sanitize_condition(field_and_operator, operator, parsed_value)
|
299
|
+
if Rails::VERSION::MAJOR < 5
|
300
|
+
condition_value = prepare_value_for_operator(operator, ActiveRecord::Base.sanitize(parsed_value))
|
301
|
+
"#{field_and_operator} #{condition_value}"
|
302
|
+
# NOTICE: sanitize method as been removed in Rails 5.1 and sanitize_sql introduced in Rails 5.2.
|
303
|
+
elsif Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 1
|
304
|
+
condition_value = prepare_value_for_operator(operator, ActiveRecord::Base.connection.quote(parsed_value))
|
305
|
+
"#{field_and_operator} #{condition_value}"
|
306
|
+
else
|
307
|
+
condition_value = prepare_value_for_operator(operator, '?')
|
308
|
+
ActiveRecord::Base.sanitize_sql(["#{field_and_operator} #{condition_value}", parsed_value])
|
309
|
+
end
|
310
|
+
end
|
295
311
|
end
|
296
312
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module ForestLiana
|
2
|
-
class HasManyDissociator
|
2
|
+
class HasManyDissociator < ForestLiana::ApplicationController
|
3
3
|
def initialize(resource, association, params)
|
4
4
|
@resource = resource
|
5
5
|
@association = association
|
@@ -17,7 +17,7 @@ module ForestLiana
|
|
17
17
|
if @data.is_a?(Array)
|
18
18
|
record_ids = @data.map { |record| record[:id] }
|
19
19
|
elsif @data.dig('attributes').present?
|
20
|
-
record_ids = ForestLiana::ResourcesGetter.get_ids_from_request(@params)
|
20
|
+
record_ids = ForestLiana::ResourcesGetter.get_ids_from_request(@params, forest_user)
|
21
21
|
else
|
22
22
|
record_ids = Array.new
|
23
23
|
end
|
@@ -4,7 +4,7 @@ module ForestLiana
|
|
4
4
|
attr_reader :includes
|
5
5
|
attr_reader :records_count
|
6
6
|
|
7
|
-
def initialize(resource, association, params)
|
7
|
+
def initialize(resource, association, params, forest_user)
|
8
8
|
@resource = resource
|
9
9
|
@association = association
|
10
10
|
@params = params
|
@@ -13,7 +13,7 @@ module ForestLiana
|
|
13
13
|
@collection = get_collection(@collection_name)
|
14
14
|
compute_includes()
|
15
15
|
includes_symbols = @includes.map { |include| include.to_sym }
|
16
|
-
@search_query_builder = SearchQueryBuilder.new(@params, includes_symbols, @collection)
|
16
|
+
@search_query_builder = SearchQueryBuilder.new(@params, includes_symbols, @collection, forest_user)
|
17
17
|
|
18
18
|
prepare_query()
|
19
19
|
end
|
@@ -1,20 +1,22 @@
|
|
1
1
|
module ForestLiana
|
2
2
|
class LeaderboardStatGetter < StatGetter
|
3
|
-
def initialize(
|
4
|
-
@
|
5
|
-
|
6
|
-
@
|
7
|
-
|
8
|
-
@
|
9
|
-
@
|
10
|
-
@
|
11
|
-
@
|
12
|
-
@groub_by = "#{@resource.table_name}.#{@label_field}"
|
3
|
+
def initialize(parent_model, params, forest_user)
|
4
|
+
@scoped_parent_model = get_scoped_model(parent_model, forest_user, params[:timezone])
|
5
|
+
child_model = @scoped_parent_model.reflect_on_association(params[:relationship_field]).klass
|
6
|
+
@scoped_child_model = get_scoped_model(child_model, forest_user, params[:timezone])
|
7
|
+
@label_field = params[:label_field]
|
8
|
+
@aggregate = params[:aggregate].downcase
|
9
|
+
@aggregate_field = params[:aggregate_field]
|
10
|
+
@limit = params[:limit]
|
11
|
+
@groub_by = "#{@scoped_parent_model.table_name}.#{@label_field}"
|
13
12
|
end
|
14
13
|
|
15
14
|
def perform
|
16
|
-
|
17
|
-
|
15
|
+
includes = ForestLiana::QueryHelper.get_one_association_names_symbol(@scoped_child_model)
|
16
|
+
|
17
|
+
result = @scoped_child_model
|
18
|
+
.joins(includes)
|
19
|
+
.where({ @scoped_parent_model.name.downcase.to_sym => @scoped_parent_model })
|
18
20
|
.group(@groub_by)
|
19
21
|
.order(order)
|
20
22
|
.limit(@limit)
|
@@ -24,8 +26,12 @@ module ForestLiana
|
|
24
26
|
@record = Model::Stat.new(value: result)
|
25
27
|
end
|
26
28
|
|
27
|
-
def
|
28
|
-
|
29
|
+
def get_scoped_model(model, forest_user, timezone)
|
30
|
+
scope_filters = ForestLiana::ScopeManager.get_scope_for_user(forest_user, model.name, as_string: true)
|
31
|
+
|
32
|
+
return model.unscoped if scope_filters.blank?
|
33
|
+
|
34
|
+
FiltersParser.new(scope_filters, model, timezone).apply_filters
|
29
35
|
end
|
30
36
|
|
31
37
|
def order
|
@@ -25,8 +25,10 @@ module ForestLiana
|
|
25
25
|
def perform
|
26
26
|
value = get_resource().joins(@includes)
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
filters = ForestLiana::ScopeManager.append_scope_for_user(@params[:filters], @user, @resource.name)
|
29
|
+
|
30
|
+
unless filters.blank?
|
31
|
+
value = FiltersParser.new(filters, @resource, @params[:timezone]).apply_filters
|
30
32
|
end
|
31
33
|
|
32
34
|
Groupdate.week_start = :monday
|
@@ -7,7 +7,6 @@ module ForestLiana
|
|
7
7
|
@@expiration_in_seconds = (ENV['FOREST_PERMISSIONS_EXPIRATION_IN_SECONDS'] || 3600).to_i
|
8
8
|
|
9
9
|
def initialize(resource, permission_name, rendering_id, user_id: nil, smart_action_request_info: nil, collection_list_parameters: Hash.new, query_request_info: nil)
|
10
|
-
|
11
10
|
@collection_name = resource.present? ? ForestLiana.name_for(resource) : nil
|
12
11
|
@permission_name = permission_name
|
13
12
|
@rendering_id = rendering_id
|
@@ -119,7 +118,7 @@ module ForestLiana
|
|
119
118
|
permissions = @@renderings_cached[@rendering_id]
|
120
119
|
permissions && permissions['stats'] && permissions['stats']['queries']
|
121
120
|
end
|
122
|
-
|
121
|
+
|
123
122
|
def get_stat_with_parameters_content(statPermissionType)
|
124
123
|
permissions = @@renderings_cached[@rendering_id]
|
125
124
|
permissions && permissions['stats'] && permissions['stats'][statPermissionType]
|
@@ -163,7 +162,7 @@ module ForestLiana
|
|
163
162
|
|
164
163
|
return false unless segments_queries_permissions
|
165
164
|
|
166
|
-
# NOTICE: @query_request_info matching an existing segment query
|
165
|
+
# NOTICE: @query_request_info matching an existing segment query
|
167
166
|
return segments_queries_permissions.include? @collection_list_parameters[:segmentQuery]
|
168
167
|
end
|
169
168
|
|
@@ -172,7 +171,7 @@ module ForestLiana
|
|
172
171
|
|
173
172
|
return false unless live_queries_permissions
|
174
173
|
|
175
|
-
# NOTICE: @query_request_info matching an existing live query
|
174
|
+
# NOTICE: @query_request_info matching an existing live query
|
176
175
|
return live_queries_permissions.include? @query_request_info
|
177
176
|
end
|
178
177
|
|
@@ -23,7 +23,7 @@ module ForestLiana
|
|
23
23
|
# },
|
24
24
|
# },
|
25
25
|
# },
|
26
|
-
#
|
26
|
+
# renderings => {
|
27
27
|
# {rendering_id} => {
|
28
28
|
# {collection_id} => {
|
29
29
|
# segments => ['query1', 'query2']
|
@@ -32,7 +32,7 @@ module ForestLiana
|
|
32
32
|
# }
|
33
33
|
# }
|
34
34
|
# With `rendering_specific_only` this returns only the permissions related data specific to the provided rendering
|
35
|
-
# For now this only includes scopes
|
35
|
+
# For now this only includes scopes (but scopes are not used anymore in permissions)
|
36
36
|
def get_permissions_for_rendering(rendering_id, rendering_specific_only: false)
|
37
37
|
begin
|
38
38
|
query_parameters = { 'renderingId' => rendering_id }
|
@@ -7,8 +7,10 @@ module ForestLiana
|
|
7
7
|
timezone_offset = @params[:timezone].to_i
|
8
8
|
resource = get_resource().eager_load(@includes)
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
filters = ForestLiana::ScopeManager.append_scope_for_user(@params[:filters], @user, @resource.name)
|
11
|
+
|
12
|
+
unless filters.blank?
|
13
|
+
resource = FiltersParser.new(filters, resource, @params[:timezone]).apply_filters
|
12
14
|
end
|
13
15
|
|
14
16
|
result = resource
|
@@ -53,7 +55,8 @@ module ForestLiana
|
|
53
55
|
if @params[:aggregate].downcase == 'sum'
|
54
56
|
field = @params[:aggregate_field].downcase
|
55
57
|
else
|
56
|
-
|
58
|
+
# `count_id` is required only for rails v5
|
59
|
+
field = Rails::VERSION::MAJOR == 5 || @includes.size > 0 ? 'id' : 'all'
|
57
60
|
end
|
58
61
|
"#{@params[:aggregate].downcase}_#{field} #{order}"
|
59
62
|
end
|