Firebase 多种管理类型
Firebase Multiple Admin Types
在我正在开发的产品中(使用 ReactJS 和 Firebase Auth with Firestore),我需要设置以下帐户类型:
超级管理员
内容管理员
用户管理员
目前,我有一个表单,一旦输入用户电子邮件,它就会向具有该电子邮件地址的用户提供一个“管理员”令牌。
对于 3 种不同的管理类型,我能以什么方式做到这一点?
我已经包含了设置管理员令牌的代码。
AddAdmin.js
import React, { Component } from 'react'
import './AddAdmin.scss'
const firebase = require("firebase");
class AddAdmin extends Component {
state = {
superAdminEmail: ''
}
updateAdminEmail = (e) => {
this.setState({
adminEmail: e.target.value
})
}
addAdmin = (e) => {
e.preventDefault();
const addAdminRole = firebase.functions().httpsCallable('addAdminRole');
addAdminRole({email: this.state.adminEmail})
.then(result => {
console.log(result);
})
}
render() {
return (
<div className = "AddAdminForm">
<form className = "admin-actions" onSubmit={this.addAdmin}>
<input type = "email" placeholder = "User email" id = "admin-email" value={this.state.adminEmail} onChange={this.updateAdminEmail} required/>
<button type="submit"> Make Admin </button>
</form>
</div>
)
}
}
export default AddAdmin
Index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.addAdminRole = functions.https.onCall((data, context) => {
// get user and add admin custom claim
return admin.auth().getUserByEmail(data.email).then(user => {
return admin.auth().setCustomUserClaims(user.uid, {
admin: true
})
}).then(() => {
return {
message: `Success! ${data.email} has been made an admin.`
}
}).catch(err => {
return err;
});
});
一种方法是通过向 select 角色引入单选按钮来扩展您的逻辑,然后在提交时,它将在表单提交时调用特定的处理程序 (addAdmin / addSuperAdmin / addContextAdmin)。
如果用户管理员的无线电 btn 是 selected,调用 addAdmin
进而调用 addAdminRole
云函数。
同样可以引入另外两个云函数(在index.js) -> addSuperAdminRole
和addContextAdminRole
.
然后根据单选按钮调用相关处理函数selected.
在我正在开发的产品中(使用 ReactJS 和 Firebase Auth with Firestore),我需要设置以下帐户类型:
超级管理员
内容管理员
用户管理员
目前,我有一个表单,一旦输入用户电子邮件,它就会向具有该电子邮件地址的用户提供一个“管理员”令牌。
对于 3 种不同的管理类型,我能以什么方式做到这一点?
我已经包含了设置管理员令牌的代码。
AddAdmin.js
import React, { Component } from 'react'
import './AddAdmin.scss'
const firebase = require("firebase");
class AddAdmin extends Component {
state = {
superAdminEmail: ''
}
updateAdminEmail = (e) => {
this.setState({
adminEmail: e.target.value
})
}
addAdmin = (e) => {
e.preventDefault();
const addAdminRole = firebase.functions().httpsCallable('addAdminRole');
addAdminRole({email: this.state.adminEmail})
.then(result => {
console.log(result);
})
}
render() {
return (
<div className = "AddAdminForm">
<form className = "admin-actions" onSubmit={this.addAdmin}>
<input type = "email" placeholder = "User email" id = "admin-email" value={this.state.adminEmail} onChange={this.updateAdminEmail} required/>
<button type="submit"> Make Admin </button>
</form>
</div>
)
}
}
export default AddAdmin
Index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.addAdminRole = functions.https.onCall((data, context) => {
// get user and add admin custom claim
return admin.auth().getUserByEmail(data.email).then(user => {
return admin.auth().setCustomUserClaims(user.uid, {
admin: true
})
}).then(() => {
return {
message: `Success! ${data.email} has been made an admin.`
}
}).catch(err => {
return err;
});
});
一种方法是通过向 select 角色引入单选按钮来扩展您的逻辑,然后在提交时,它将在表单提交时调用特定的处理程序 (addAdmin / addSuperAdmin / addContextAdmin)。
如果用户管理员的无线电 btn 是 selected,调用 addAdmin
进而调用 addAdminRole
云函数。
同样可以引入另外两个云函数(在index.js) -> addSuperAdminRole
和addContextAdminRole
.
然后根据单选按钮调用相关处理函数selected.