Пользователь в Firebase не может читать или писать свои собственные документы в FireStore - PullRequest
1 голос
/ 15 апреля 2020

У меня есть пользователь, который вошел в систему с учетной записью Google, и в Firebase, идентификатор пользователя: «123»

В Firestore: данные, существует коллекция, «пользователи», с одним документом, '123' с полем 'name: "test"'

В firestore: правила следующие правила

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, update, write, delete: if request.auth.uid == userId;
    }
  }
}

В моем компоненте мой код:

  users: Observable<User[]>;

  ngOnInit()
  {
    this.users = this.firestore.collection<User>('users'); 
  }  

  constructor(public auth: AngularFireAuth, private firestore : AngularFirestore) {}

Html:

<ul>
   <li *ngFor='user of angObs | async>
    {{ user.name }}
   <li>
<ul>
<div *ngIf='auth.user | async as user'>
    <p>User id:</p>
    {{ user.uid }}
</div>

HMTL читает:

Идентификатор пользователя:

123

, когда правило равно request.auth.uid != null;, пользователь видит данные.

, когда правилом является request.auth.uid == userId;, пользователь не видит данные.

Что я делаю не так?

1 Ответ

3 голосов
/ 15 апреля 2020

Вы запрашиваете всю коллекцию пользователей, и поэтому невозможно пройти этот тест, так как ваш идентификатор пользователя должен соответствовать каждому идентификатору документа.

Необходимо указать исправление для документа, например:

this.users = this.firestore.collection('users').doc<User>(userId).get()

Это приведет к тому, что только один документ пользователя не будет User[]

Если вы попытаетесь запросить всю коллекцию пользователей, как кажется, по вашему

  users: Observable<User[]>;

. Вам нужно добавить пользовательское свойство для объекта пользователя, которое определяет привилегии

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