Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firestore security rules: How to validate that a field is undefined?

When a user signs up and they initialise their data in firestore, I want to validate that they aren't attempting to set their role (i.e. so they're not setting it to 'admin' for example).

I tried to write this:

match /users/{userId} {
  allow create: if (signedInAs(userId) && !request.resource.data.role) || isAdmin();
  ...

...but I just see "Property role is undefined on object."

Is there a way to do this safely? Or does this mean I should always be initialising expected fields, even if it's just to the empty string? That doesn't seem to quite fit with the philosophy of NoSQL?

like image 352
Joseph Humfrey Avatar asked Nov 24 '18 13:11

Joseph Humfrey


People also ask

What is firestore security rules?

Cloud Firestore Security Rules allow you to control access to documents and collections in your database. The flexible rules syntax allows you to create rules that match anything, from all writes to the entire database to operations on a specific document.

Does firestore Create collection if not exists?

Collections and documents are created implicitly in Cloud Firestore. Simply assign data to a document within a collection. If either the collection or document does not exist, Cloud Firestore creates it.

Can I use firestore without authentication?

To be honest, without Firebase Authentication, it's not possible to accept writes to a database without Authentication and also avoid abuse, since anyone could write anything from anywhere on the internet.


1 Answers

Use the in operator to find out if a property of an object doesn't exist.

!("role" in request.resource.data)

This yields a boolean. See it in the rules API docs for the Map type.

like image 114
Doug Stevenson Avatar answered Oct 22 '22 00:10

Doug Stevenson