Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Allow update on single field in firestore

I want to give a user the right to update a document. But ONLY if the user updates one specific field of this document. All other fields shouldn't be changed by this user.

Is this possible in firestore?

I tried something like this:

function isUpdateToOpenField(attr) {
    return attr == get(/databases/$(database)/documents/stores/$(store)).data.open;
}

allow update: if isUpdateToOpenField(request.resource.data);

But I don't know how to compare if the update corresponds to the right field.

like image 445
progNewbie Avatar asked Apr 05 '18 11:04

progNewbie


2 Answers

Map diffs in the Rules language were introduced to solve this:

function isUpdateToOpenField() {
    return request.resource.data.diff(resource.data).affectedKeys().hasOnly(['open']);
}

allow update: if isUpdateToOpenField();
like image 123
Scott Crossen Avatar answered Oct 03 '22 11:10

Scott Crossen


Update: Instead of writeFields, you can now use Map.diff()

Check out the writeFields variable for security rules:

allow update: if ((request.writeFields.size() == 1) && ('open' in request.writeFields));
like image 25
Juan Lara Avatar answered Oct 03 '22 10:10

Juan Lara