本文介绍了FiRestore安全规则:允许一个特定用户访问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个生产版和一个沙盒FiRestore数据库以及一个通用的FireStore.rules文件。
我希望每个数据库只允许一个用户具有读写权限。

我当前已将此配置用于安全规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
  
    function isAdmin(uid) {
      return uid == "IKHXrLmfIFZvrimpJUwnfUzTUoE2" 
      || uid == "xVTByGu49XX3rOdNYMKf2Bzt5bY2";
    }
    
    match /{document=**} {
      allow read, write: if isAdmin(request.auth.uid)
    }
  }
}

第一个uid是demo用户(只存在于沙盒Firebase项目中),第二个是生产数据库的admin用户(只存在于生产项目中)

详细信息:

  • 代码库已打开
  • 沙盒数据库有公共API密钥和演示用户凭据(免费方案)。
  • 生产数据库是私有的,API密钥和管理员凭据受到保护。

我知道发布沙盒API密钥不是最好的,但它不是一个重要的数据库。
重要的是生产数据库保持安全。

使用此方法是否存在安全问题?如果是,我如何保护生产数据库?

推荐答案

我在第一次开始项目时一直使用此方法。我创建了一个初始(匿名)用户,并在安全规则中授予该用户广泛的权限。

因为您需要项目的服务凭据才能在我的项目上随意设置相同的UID,所以此方法是安全的,并允许我快速开始。

然后,当我准备好使用更广泛的安全系统时,我会扩展安全模型,通常是以下其中之一:

  1. 允许特定域中的所有用户进行管理访问。
  2. 在数据库中创建管理员UID列表,并在我的规则中检查该列表。
  3. 向用户令牌添加自定义声明isAdmin,并在安全规则中进行检查。

但即使在这一点上,我也倾向于保留硬编码的UID,因为它们没有安全风险。

这篇关于FiRestore安全规则:允许一个特定用户访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-25 00:55