0

スーパー管理者は、誰もが自分のプロフィールを編集して新しいコンテンツを公開することができる特別なuidを持つユーザーです。Firebaseで 'スーパー管理者'を作る方法は?

スーパー管理者を作成するにはどうすればよいですか?

+0

現在のDB構造とセキュリティルールを教えてください。 – Orlandster

+0

@Olandlandster私はDB構造とセキュリティルールを持っていないので、ユーザー、モデレータ、管理者などの独自のスキーマを作成できます。単なる基本的なアイデアです。 – Ivan

+0

Firebaseにスーパー管理のコンセプトはありません。すべてのユーザーは他のすべてのユーザーと同じです。ただし、実装するルールに基づいて、異なるユーザにFirebaseへのアクセス権を与えることができます。たとえば、各子供がuidのキーを持っていて、各uidノードの子にそのユーザーに関する詳細情報が含まれているユーザーノードがあるとします。/uid/user_type = "Super"ノードを持つことができます。ルールを使用すると、スーパーユーザーだけがそのノードにアクセスできるようにする、「super」のuser_typeを持たないすべてのユーザーへのアクセスを拒否できます。私は、ルールをより完全に理解するために、Firebaseを使って作業することをお勧めします。 – Jay

答えて

2

基本的には、データ構造と所属するセキュリティルールです。 開始するには、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ノードに書き込むことができます。これを、必要なすべてのノードに適用することができます。

2

カスタムユーザー属性の使用を検討してください。ユーザーは、すべての認証済みのリクエストに応じて管理者である場合がルックアップするリアルタイムのデータベースを使用するよりも効率的かつ安価である:

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. 
    } 
}); 
+0

Firebase SDKが必要ですが、Firebaseコンソールを使わずにユーザーを編集するためのバックエンドではありませんか? – Ivan

関連する問題