スーパー管理者は、誰もが自分のプロフィールを編集して新しいコンテンツを公開することができる特別なuidを持つユーザーです。Firebaseで 'スーパー管理者'を作る方法は?
スーパー管理者を作成するにはどうすればよいですか?
スーパー管理者は、誰もが自分のプロフィールを編集して新しいコンテンツを公開することができる特別なuidを持つユーザーです。Firebaseで 'スーパー管理者'を作る方法は?
スーパー管理者を作成するにはどうすればよいですか?
基本的には、データ構造と所属するセキュリティルールです。 開始するには、user roles
という種類のデータ構造を作成します。このような例
:
{
"data" : {
"user1id" : {
"name" : "MisterX"
},
"user2id" : {
"name" : "John Doe"
}
},
"users" : {
"user1id" : {
"role" : "admin"
},
"user2id" : {
"role" : "member"
}
}
}
各ユーザーは、role
というプロパティがあります。
今すぐあなたのセキュリティルールを定義し、右のアクセス権を定義するためにrole
プロパティを利用することができます:ちょうど管理者上記の場合
"data" : {
"$userid" : {
".read" : true,
".write" : "root.child('users').child(auth.uid).child('role') === 'admin'",
}
}
はdata/userid
ノードに書き込むことができます。これを、必要なすべてのノードに適用することができます。
カスタムユーザー属性の使用を検討してください。ユーザーは、すべての認証済みのリクエストに応じて管理者である場合がルックアップするリアルタイムのデータベースを使用するよりも効率的かつ安価である:
https://firebase.google.com/docs/auth/admin/custom-claims
あなたは作成時にユーザーに管理者の役割を設定します: admin.auth().setCustomUserClaims(uid, {admin: true})
IDトークンの更新後にクライアントに伝播できます。
{
"rules": {
"adminContent": {
".read": "auth.token.admin === true",
".write": "auth.token.admin === true",
}
}
}
ルールを使用していないか、Firebase RTDBは、その後、Firebase経由IDトークンからそれを解析することによって、あなたのバックエンドで、それを強制する場合:
currentUser.getIdToken(true)
その後、あなたは、単にルールを施行することができますAdmin SDK:
// Verify the ID token first.
admin.auth().verifyIdToken(idToken).then((claims) => {
if (claims.admin === true) {
// Allow access to requested admin resource.
}
});
Firebase SDKが必要ですが、Firebaseコンソールを使わずにユーザーを編集するためのバックエンドではありませんか? – Ivan
現在のDB構造とセキュリティルールを教えてください。 – Orlandster
@Olandlandster私はDB構造とセキュリティルールを持っていないので、ユーザー、モデレータ、管理者などの独自のスキーマを作成できます。単なる基本的なアイデアです。 – Ivan
Firebaseにスーパー管理のコンセプトはありません。すべてのユーザーは他のすべてのユーザーと同じです。ただし、実装するルールに基づいて、異なるユーザにFirebaseへのアクセス権を与えることができます。たとえば、各子供がuidのキーを持っていて、各uidノードの子にそのユーザーに関する詳細情報が含まれているユーザーノードがあるとします。/uid/user_type = "Super"ノードを持つことができます。ルールを使用すると、スーパーユーザーだけがそのノードにアクセスできるようにする、「super」のuser_typeを持たないすべてのユーザーへのアクセスを拒否できます。私は、ルールをより完全に理解するために、Firebaseを使って作業することをお勧めします。 – Jay