Почему правила Firebase запрещают при попытке отправить данные? - PullRequest
0 голосов
/ 11 июня 2019

Добрый день всем, у меня такая коллекция

organization : [
   - id : auto generated
   - users: 
      [0]
      - uid: user1
      - userName: testUser

]

Я работаю над Angular и пытался передать новый пользовательский объект в массив users, но разрешение отклонено. Моя учетная запись должна быть помечена как пройденная, когда я вошел в систему, а также имеет разрешение на создание, обновление, удаление в этой коллекции.

Вот что я написал в своем приложении Angular

 AddToOrganization(userData, organization){
    firebase.firestore().collection("organizations").doc(organization.id).set(
    {users: [userData]},
    {merge: true}
  );
  }

А это мои правила ведения огня

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    // Function
    function getRole(){
        return get(/database/$(database)/documents/users/$(request.auth.uid)).data;
     }

    function isSignedIn(){
       return request.auth != null;
    }
    function isAdmin(){
    return getRole().roles.keys().hasAny(['admin']) == true;
    }

    // organizations documents
    match /organizations/{organization}{
        allow read;
         allow create,update: if isSignedIn() && request.resoure.data.roles.keys().hasAny(['admin','editor']) == true;
        allow delete: if isSignedIn() && isAdmin() == true;

    }

}

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

1 Ответ

0 голосов
/ 11 июня 2019

Вместо этого можно попробовать использовать рекурсивный подстановочный синтаксис {organization=**}, чтобы разрешить доступ к сколь угодно глубокой иерархии.

См. в этом разделе о рекурсивных подстановочных знаках в разделе «Правила безопасности».

Надеюсь, это поможет!

...