Правила Firestore сравнивают ссылку с созданным путем - PullRequest
0 голосов
/ 23 февраля 2019

В моих company документах у меня есть поле ссылки с именем owner, которое указывает на документ user.Как правило, я пытаюсь проверить, является ли аутентифицированный uid владельцем компании:

match /companies/{companyId} {
  allow read: if isOwner(resource.data.owner, request.auth.uid);
}



function isOwner(owner, userId) {
   return path('/users/' + userId) == owner;
}

Я пробовал много вещей, но не могу понять, как заставить это работать.

(Я знаю, что вместо ссылки работает строка, но я бы предпочел использовать ссылку)

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Когда вы создаете путь, включите этот префикс: /databases/(default)/documents/.Это часть полного пути к документу.

match /companies/{companyId} {
  allow read: if isOwner(resource.data.owner, request.auth.uid);
}

function isOwner(owner, userId) {
   return path('/databases/(default)/documents/users/' + userId) == owner;
}
0 голосов
/ 23 февраля 2019

Почему бы не сделать поле ownerId в compagny документе и проверить, равно ли значение идентифицированного пользовательского uid значению?

service cloud.firestore {
    match /databases/{database}/documents {
        match /companies/{compagnyId} {
            allow read: if isOwner()
        }
    }
}

function currentData() {
    return resource.data
}

function isOwner() {
    return currentData().ownerId == request.auth.uid
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...