How to write rule permission for array of objects?

I have a user object which looks like this: { "identities": [{"id": "6a.....", ...}] ... }

iwant to match this field in my flexible sync rule permissions, i have tried this:

{
  "userId": {
    "%stringToOid": "%%user.identities.0.id"
  }
}

It’s not working… Any solution?

To match the userId field in your flexible sync rule permissions based on the user’s identity within the array, you’ll need to use a more appropriate expression for accessing array elements and converting the string to an ObjectId. The issue lies in the way you’re trying to access the array and convert the string to an ObjectId.

  • Check Field Type to ensure that the userId field in your documents is of the same type as what you’re comparing it against (i.e., ObjectId vs. string).

  • Use Array Index to make sure you’re correctly targeting the array index that contains the ID you want to match. In this case, 0 is used to access the first identity.

This should resolve the issue and allow you to match the userId field with the user’s identity properly.

Here’s how you can structure your permission rule:

{
  "userId": {
    "$oid": { "$arrayElemAt": ["%%user.identities.id", 0] }
  }
}
  • $arrayElemAt: This operator is used to get an element from an array at the specified index. In this case, it gets the first element (index 0) of the identities.id array.

  • $oid: This operator is used to convert a string to an ObjectId. The result of the $arrayElemAt operation is passed into this conversion.

How to Implement:

  1. Access the Array Element by using $arrayElemAt to retrieve the first element in the identities.id array.

  2. Convert to ObjectId: then use $oid to convert the string ID to an ObjectId if the userId is stored as an ObjectId in your collection.

If your userId is stored as an ObjectId in your collection, the rule would look like this:


{
  "userId": {
    "$oid": {
      "$arrayElemAt": ["%%user.identities.id", 0]
    }
  }
}

This rule checks that the userId field in your document matches the first identity’s ID in the user’s identities array after converting it to an ObjectId.