Я пытаюсь написать код для администратора, чтобы обновить значения полей пользователей, хранящиеся в облачном 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.