Как получить идентификатор документа из магазина? - PullRequest
0 голосов
/ 08 апреля 2019

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

Я создаю кроссплатформенное мобильное приложение с использованием ионной инфраструктуры в интерфейсе и Firebase в фоновом режиме. Это приложение имеет единого администратора. Администратор будет контролировать доступ пользователей к нескольким частям приложения, поэтому для этого мне придется обновить значения полей в пользовательском документе в Firestore.

import { Component, OnInit } from '@angular/core';
import { User } from 'src/app/services/user/grade.service';
import { AdminService } from 'src/app/services/admin/admin.service';
import { Observable } from 'rxjs';
import { AngularFirestoreCollection, AngularFirestore } from 'angularfire2/firestore';
import {map} from 'rxjs/operators';
import * as firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
export interface usrId extends User {
  id: string;

}
@Component({
  selector: 'app-student-details',
  templateUrl: './student-details.page.html',
  styleUrls: ['./student-details.page.scss'],
})
export class StudentDetailsPage implements OnInit {
public docId;
public userEmail;
public userName;
public data:any;
public user: User;
public userData:any;
public userStatus;
public visible: boolean;
public isDisabled: boolean; 
public isStatus: boolean;
public newStatus;
public users: Observable<User[]>;
private userProfileCollection: AngularFirestoreCollection<User>;
public uData: firebase.firestore.DocumentReference;
public currentUser: firebase.User;

    constructor(private adminService: AdminService, public db: AngularFirestore){
    this.userProfileCollection = this.db.collection<User>('userProfile');
    this.users = this.userProfileCollection.snapshotChanges().pipe(
      map(actions => {
        return actions.map(a => {
          const udata = a.payload.doc.data() as User;
          const id = a.payload.doc.id;
          console.log(udata +"constructor Id");
          return { id, ...udata };
        });
      })
    );


    }

    getAllPosts(): Observable<any> {
      return this.db.collection<any>
.

( "Userprofile") valueChanges (); }

    runPost() {
      this.getAllPosts().subscribe((data)=>{
          this.data = data;
          this.user = JSON.parse(JSON.stringify(this.data[0]));
          console.log(this.user.id+""+"in run post");
      });
    }

  ngOnInit() {
    this.adminService
    .getUserDetails()
    .get()
    .then( userProfileSnapshot => {
      this.userData = userProfileSnapshot.data();
      console.log(this.userData.email)
      this.runPost();
    });
    this.visible = false;
    this.isDisabled = true;
    this.isStatus = true;
  }

  getStatus(){
    for(let data of this.data){
      if(data.email === this.userEmail){
        this.userStatus = data.status;
        this.userName = data.firstName;
        console.log

      }
    }
    this.visible = true;
  }

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

  updateStatus(us: User):Promise<void>{

    return this.userProfileCollection.doc(us.id).update({status:2});


  }

}





When the admin tries to update the field value, the update must successfully take place. And admin should be able to retrieve user docId.
...