Class: Parse::Constraint::ACLWritableByConstraint

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

Overview

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

For role-based filtering with automatic “role:” prefix, use writable_by_role instead.

# Find objects writable by a specific user object (fetches user's roles automatically)
Post.where(:ACL.writable_by => user)

# Find objects writable by exact permission strings (no prefix added)
Post.where(:ACL.writable_by => "user123")           # User ID
Post.where(:ACL.writable_by => "role:Admin")        # Role with explicit prefix
Post.where(:ACL.writable_by => ["user123", "role:Admin"])

Instance Attribute Summary

Attributes inherited from Parse::Constraint

#operand, #operation, #operator, #value

Instance Method Summary collapse

Methods inherited from Parse::Constraint

#as_json, constraint_keyword, create, formatted_value, #formatted_value, #initialize, #key, #precedence, register, #to_s

Constructor Details

This class inherits a constructor from Parse::Constraint

Instance Method Details

#buildHash

Returns the compiled constraint using _wperm field.

Returns:

  • (Hash)

    the compiled constraint using _wperm field.



2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
# File 'lib/parse/query/constraints.rb', line 2750

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

  # Special case: "none" matches objects whose _wperm is an empty
  # array — master-key-only documents. See {ACLReadableByConstraint#build}.
  if value.is_a?(String) && value == "none"
    pipeline = [{ "$match" => { "_wperm" => { "$eq" => [] } } }]
    return { "__aggregation_pipeline" => pipeline }
  end

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

#writable_byACLWritableByConstraint

A registered method on a symbol to create the constraint.

Examples:

q.where :ACL.writable_by => user_or_permission_strings

Returns:



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

register :writable_by