Class: Parse::Constraint::ACLReadableByConstraint

Inherits:
Constraint
  • Object
show all
Defined in:
lib/parse/query/constraints.rb

Overview

A constraint for filtering objects based on ACL read permissions. This constraint queries the MongoDB _rperm field directly. Strings are used as exact permission values (user IDs or "role:RoleName" format).

For role-based filtering with automatic "role:" prefix, use readable_by_role instead.

Find objects readable by a specific user object (fetches user's roles automatically)

Post.where(:ACL.readable_by => user)

Find objects readable by exact permission strings (no prefix added)

Post.where(:ACL.readable_by => "user123") # User ID Post.where(:ACL.readable_by => "role:Admin") # Role with explicit prefix Post.where(:ACL.readable_by => ["user123", "role:Admin"])

Instance Method Summary collapse

Instance Method Details

#buildHash

Returns the compiled constraint using _rperm field.

Returns:

  • (Hash)

    the compiled constraint using _rperm field.



2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
# File 'lib/parse/query/constraints.rb', line 2684

def build
  # Use @value directly to preserve type information before
  # formatted_value converts to pointers.
  value = @value

  # Special case: "none" matches objects whose _rperm is an empty
  # array — master-key-only documents. Parse Server writes []
  # when no read permission is set, and an absent _rperm is
  # treated as public (handled by the default predicate path).
  if value.is_a?(String) && value == "none"
    pipeline = [{ "$match" => { "_rperm" => { "$eq" => [] } } }]
    return { "__aggregation_pipeline" => pipeline }
  end

  permissions = ACLPermissions.collect(value)
  ACLPermissions.pipeline(permissions, field: "_rperm")
end

#readable_byACLReadableByConstraint

A registered method on a symbol to create the constraint.

Examples:

q.where :ACL.readable_by => user_or_permission_strings

Returns:



2681
# File 'lib/parse/query/constraints.rb', line 2681

register :readable_by