Module: ForestAdminAgent::Utils::IsSegmentQueryAllowedOnConnection

Defined in:
lib/forest_admin_agent/utils/is_segment_query_allowed_on_connection.rb

Class Method Summary collapse

Class Method Details

.allowed?(collection_permissions, segment_query, connection_name) ⇒ Boolean

Check if a segment query is allowed on a specific connection This handles both single queries and UNION queries for multi-segment operations

Returns:

  • (Boolean)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/forest_admin_agent/utils/is_segment_query_allowed_on_connection.rb', line 6

def self.allowed?(collection_permissions, segment_query, connection_name)
  return false if connection_name.nil? || connection_name.empty?

  # Get all queries for the specified connection
  queries = collection_permissions[:liveQuerySegments]
            .select { |segment| segment[:connectionName] == connection_name }
            .map { |segment| segment[:query] }

  # Handle UNION queries made by the FRONT to display available actions
  # Smart Actions restricted to segment when a Smart Action is available on multiple SQL segments
  union_queries = segment_query.split('/*MULTI-SEGMENTS-QUERIES-UNION*/ UNION ')

  if union_queries.length > 1
    authorized_queries = queries.to_set { |query| query.gsub(/;\s*\z/i, '').strip }

    return union_queries.all? { |union_query| authorized_queries.include?(union_query.strip) }
  end

  queries.any?(segment_query)
end