Firestore запрашивает с ролями? - PullRequest
0 голосов
/ 25 июня 2018

В документации указано, что вы можете выполнить запрос, сравнивая строку с другим строковым значением, например:

citiesRef.where('name', '>=', 'San Francisco');
citiesRef.where('state', '>=', 'CA').where('state', '<=', 'IN');

Затем в документации есть ролей показывает, как применять роли в документах Firestore.Однако не показано, как запросить это .. Но, как показано в примере выше, это должно работать следующим образом:

citiesRef.where(`roles.${user.uid}`, '>', '');

, так что этот запрос выше, должен возвращать все документы, где любое значение больше, чем пустая строка,верно?

В моем коде у меня есть коллекция организаций с одним документом:

{
  "name": "MyAmazingCompany",
  "roles": {
    "my-user-uid": "owner"
  }
}

И если я попытаюсь запросить организации, в которых у меня есть роль, подобная этой:

organizationsRef.where(`roles.${user.uid}`, '>', '');

Я просто получу Uncaught Error in onSnapshot: Error: Missing or insufficient permissions. в консоли браузера (используя пакет Firebase npm версии 5.1.0 и пробовал также 5.0.3).

Просто чтобы убедиться, что у меня должен быть доступ к этому документу,следующий запрос проверен, он работает и возвращает одну организацию.

organizationsRef.where(`roles.${user.uid}`, '==', 'owner');

Так что же не так?

Также здесь кто-то утверждает, что он должен работать: Firestore select где находитсяне нуль

И вот мои правила:

service cloud.firestore {
  match /databases/{database}/documents {
    function isSignedIn() {
      return request.auth != null;
    }

    function getRole(rsc) {
      // Read from the "roles" map in the resource (rsc).
      return rsc.data.roles[request.auth.uid];
    }

    function isOneOfRoles(rsc, array) {
      // Determine if the user is one of an array of roles
      return isSignedIn() && (getRole(rsc) in array);
    }

    match /organizations/{organizationId} {
      allow read: if isOneOfRoles(resource, ['owner']);
      allow write: if isOneOfRoles(resource, ['owner']);
    }
  }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...