更新所有用户firebase angular的特定字段



由于我是angular和Ionic的新手,我正在尝试更新用户的特定字段。我想显示来自firebase的所有数据,并只更新一个字段。我只能为一个登录用户执行此操作,但不能为所有用户执行此操作。

export class AdminPage implements OnInit {
user:any;
userId:string;
enableAccess:boolean;
constructor(
private auth:AuthService, 
private router:Router, 
private afs:AngularFirestore,
private loadingCtrl:LoadingController,
private toastr:ToastController) { }
ngOnInit() {
this.auth.getAllUser().subscribe(user=>{
this.user=user;
})
this.auth.user$.subscribe(user=>{
this.enableAccess=user.IsApproved;
})

}
async updateUserInfo(){
const loading=await this.loadingCtrl.create({
message:'updating',
spinner:'crescent',
showBackdrop:true
})
loading.present()
this.afs.collection('user').doc(this.userId).set({
'IsApproved':this.user.enableAccess
},{merge:true}).then(()=>{
this.toast('update sucessful','success');
}).catch(error=>{
loading.dismiss();
this.toast(error.message,'danger');
})
}
async toast(message,status){
const toast =await this.toastr.create({
message:message,
color: status,
position: 'top',
duration:2000
});
}
}

组件

ion-content>
<ion-card>
<ion-item> 
<ion-label position="floating">Email:</ion-label>
<p></p>
</ion-item>
<ion-item>
<ion-label position="floating">Enable Access:</ion-label>
<ion-input
required
type="boolean"
[(ngModel)]="enableAccess"
name="enableAccess"
></ion-input>
</ion-item>
<ion-button
type="submit"
expand="block"
shape="round"
(click)="updateUserInfo()"
>Update</ion-button
>
</ion-card>
</ion-content>

我想在数据库中显示每个用户的电子邮件,我想允许管理员只更新enableAccess字段。我如何获得所有用户和更新字段?

听起来您正在尝试为现有用户回填一些数据。如果是这种情况,我建议使用一次性的node.js脚本,而不是在客户端应用程序代码中。

在node.js中应该是这样的:

const admin = require("firebase-admin");
admin.initializeApp(...);
const db = admin.firestore();
db.collection("user").get((snapshot) => {
snapshot.forEach((doc) => {
doc.ref.update({ IsApproved: false });
});
});

如果你坚持这样做在客户端代码中,这将是几乎相同的。考虑到这不会立即影响UI,我建议通过常规SDK在JavaScript中进行回填。

即使结果显示在Angular UI中,AngularFire是建立在JavaScript SDK之上的,所以它们可以完美地互操作。这意味着更新也会立即显示在AngularFire中,即使你通过(更简单的)JavaScript SDK进行更新。

最新更新