Как проверить путь в ссылке в правиле безопасности? - PullRequest
0 голосов
/ 03 июня 2019

Я хочу проверить, что ресурс имеет ссылку на пользовательский документ при его создании, но мне не нужно фактически получать () объект.Возможно ли это?

Я знаю, что могу позвонить exists() или get(), но меня действительно волнует только то, что путь правильный (это для /users/${auth.uid}).Это для Firestore.

Я хотел бы сделать что-то вроде:

allow create: if request.resource.userRef == '/users/${request.auth.uid}'

Хотя я знаю, что это невозможно.

1 Ответ

1 голос
/ 03 июня 2019

Я предполагаю, что вы пытаетесь проверить, содержит ли документ uid пользователя в качестве значения поля userRef и существует ли пользователь с соответствующим uid в вашей коллекции пользователей перед сохранением документа.

В этом случае вам необходимо выполнить 2 проверки.

1) Проверить, существует ли пользователь в users collection

2) Проверить, содержит ли документ пользователя uid в поле userRef документа

//Get the user using uid
function getUser() {
   return (get(/databases/$(database)/documents/users/$(request.auth.uid)).data);
}

//Check if user exists
function isValidUser(user) {
        return (user != null);
}
// Check access for your collection 
match /YourCollection/{id} {
        allow create: if (isValidUser(getUser()) && request.resource.data.userRef == getUser().uid);
}

Надеюсь, что это решит вашу проблему.

...