firebase firestore和身份验证管理视图

时间:2018-01-07 05:42:30

标签: firebase firebase-authentication google-cloud-firestore

我正在使用firebase身份验证和firestore。

我想在我的应用中构建管理员视图,但我不确定如何去做。

我的firestore有一个包含1级文档的集合。每个文档都有一个标识user_uid的属性

对于管理员,我想在我的应用中提供一个显示以下内容的视图:

  • 已经过身份验证的每个用户的列表
  • 深入了解我们可以看到用户创建的每个文档。

因为从身份验证中获取用户是管理功能,我是否要为此或其他使用firebase云功能? 我想避免使用我管理的后端(该应用程序是纯粹的前端,firebase处理所有后端功能)

-------更新-----------

对于我的要求似乎有些混乱。回复以下评论:

@jay:正如@Bob Snyder评论的那样,我打算使用自定义声明来识别管理员。

@Locohost:我询问

  

如何构建一个完整的Web UI,允许管理员用户在他的Firestore数据库中添加/编辑/删除数据。

我在问我想要用来托管我实现的视图或api调用的相应firebase / google服务是什么,这将允许我生成一个具有上述两个要求的视图。

例如: 我认为可以实现的一种方法是创建一个API调用,该调用将返回所有经过身份验证的用户及其uid的列表。它仅适用于被识别为管理员的用户(通过自定义声明)。

我将使用哪些/哪些服务来托管此API调用?

1 个答案:

答案 0 :(得分:3)

我将使用安全规则定义架​​构:

service cloud.firestore {
  match /databases/{database}/documents {
    match /documents/{documentId} {
      // Document owners can read/write their documents, admins can too
      allow read, write: if request.auth.uid == resource.data.ownerId  || request.auth.token.isAdmin == true;
    }
    match /users/{userId} {
      // Users can update their profiles, admins can too
      allow read, write: if request.auth.uid == userId || request.auth.token.isAdmin == true;
    }
    match /admins/{userId} {
      // Admins can do admin things
      allow read, write: if request.auth.token.isAdmin == true;
    }
  }
}

然后,您的管理员会在您的前端运行一些请求:

  • db.colletion('users').get().then(/* list of users */);
  • db.colletion('documents').where('ownerId', '==', 'some-user-id').get().then(/* list of user owned docs */);

请注意,您不必使用自定义令牌。您可以使用request.auth.token.isAdmin == trueexists(/databases/$(database)/documents/admins/$(request.auth.uid))重写get(/databases/$(database)/documents/users/$(request.auth.uid)).data.isAdmin支票,并将管理信息存储在数据库中