jdsflk
jdsflk

Reputation: 467

Firestore security rules - Function exists not found

I am developing an application, which uses Firestore as a database. I have a collection of admins, where the id of the documents is the email address of the admin. I want to create a security rule, which enables only admins to create new documents. My current solution looks like this:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{collectionName}/{document=**} {
      allow create: if exists(/databases/$(database)/documents/admins/$(request.auth.email));
    }
  }
}

But when I try to run the admin app, it gives a missing or insufficient permissions error. Furthermore, when I try to test it in the rules playground, it gives the following error:

Error running simulation — Error: simulator.rules line [6], column [24]. Function not found error: Name: [exists].; Error: Invalid argument provided to call. Function: [exists], Argument: ["||invalid_argument||"]

As far as I understand, somehow the exists function is missing and the document id is invalid, but why? It's just a string, isn't it?

Upvotes: 3

Views: 848

Answers (2)

nVitius
nVitius

Reputation: 2194

If you are trying to get the email associated with the auth request, you have to do it like this: $(request.auth.token.email). You can see details on the structure of the Request.auth object here.

Upvotes: 2

Kiran reddy
Kiran reddy

Reputation: 37

There is no option to make a user Admin and give special privileges in realtime database I think it goes the same to the FireStore.

But what you can do is add a field in the user like userType and give it the value Admin whenever an admin Signs up, subsequently you can create rules based on that.

Upvotes: 0

Related Questions