当前位置: 首页 > 知识库问答 >
问题:

如何基于用户配置文件配置Firebase安全规则?

唐向荣
2023-03-14

我读过消防安全规则文件。我已经通过Firebase(Firebase Auth)实现了身份验证,但我无法理解如何根据每个用户的配置文件在Firebase中正确配置安全规则。

考虑以下数据结构

{
    "company": {
        "idCompany1": {
            "data": {
                "address": "",
                "companyName": "Company 1",
                "logo": "assets/ApliansLogo.png",
                "nit": "",
                "phone": ""
            },
            "users": {
                "idUser1": {
                    "idCompany": "idCompany1",
                    "idUser": "idUser1",
                    "name": "Charlie",
                    "profile": "Admin"
                },
                "idUser2": {
                    "idCompany": "idCompany1",
                    "idUser": "idUser2",
                    "name": "John",
                    "profile": "Basic"
                },
                "idUser3": {
                    "idCompany": "idCompany1",
                    "idUser": "idUser3",
                    "name": "Jack",
                    "profile": "Basic"
                }
            }
        },
        "idCompany2": {
            "data": {
                "address": "",
                "companyName": "Company 2",
                "logo": "assets/ApliansLogo.png",
                "nit": "",
                "phone": ""
            },
            "users": {
                "idUser3": {
                    "idCompany": "idCompany2",
                    "idUser": "idUser3",
                    "name": "Jack",
                    "profile": "Admin"
                }
            }
        }
    },
    "users": {
        "idUser1": {
            "data": "user1@test.com",
            "empresas": {
                "idCompany1": true
            }
        },
        "idUser2": {
            "data": "user2@test.com",
            "empresas": {
                "idCompany1": true
            }
        },
        "idUser3": {
            "data": "user3@test.com",
            "empresas": {
                "idCompany1": true,
                "idCompany2": true
            }
        }
    }
}

用户只能在其所属的公司中读取或写入信息(users/$iduser/companis/$idcompany==true)

规则2

只有公司X的管理用户可以让另一个用户访问他的公司,对于该公司,idcompanyx:true是在users/$iduser/companies内的应用程序中创建的。

只有同一个用户或管理员才能在用户中创建或修改用户的数据

我已经阅读了实时数据库规则中的使用条件,但我不确定如何做到这一点。该应用程序的alghoritms处理不同的角色,但我想添加数据库安全层,我不知道如何做到这一点。目前我只配置了:

{
  "rules": {
    "company" : {
      ".read": "auth != null",
      ".write": "auth != null",
        }
      }
    },
    "users" : {
      "$user_id" : {
        ".read": "auth != null",
        ".write": "auth.uid === $user_id"           
  }
}

如何根据每个用户的身份验证和配置文件配置Firebase安全规则?

Future<EmpresaDatosModel> cargarEmpresaDatosListado(String idCompany) async {
    
   Query resp = db.child('company/$idCompany/data');
   resp.onChildAdded.forEach((element) {
      final temp = EmpresaDatosModel.fromJson(Map<String,dynamic>.from(element.snapshot.value));
    });
    await resp.once().then((snapshot) {});
    return temp;
}
db.child('company/$idCompany/data')
    .update(Map<String, dynamic>.from(_map));

共有1个答案

华浩壤
2023-03-14

要认识到的最重要的事情是规则不会过滤数据。

这意味着这个读数不适用于您的用例:

Query resp = db.child('company');
resp.onChildAdded.forEach((element) {
  ...

原因是,这要求用户/company具有完全的读取权限,而您的用例不允许这样做。

    null

因此,您似乎不能在当前数据结构上允许您的安全需求。这意味着您可能必须修改您的数据结构以允许您想要的安全模型。这可能意味着在数据库中使用该公司的JSON复制关于谁在该公司的数据。

 类似资料:
  • 问题内容: { “rules”: { “users”: { “$uid”:{ //Private whatever under “uid” but Public is exposed “.read”: “auth != null && auth.uid == $uid”, “.write”: “auth != null && auth.uid == $uid”, 我创建这些规则是为了让用户拥有公共

  • 配置文件分为用户级配置和项目级配置。 用户级配置包含用户的环境及 UI 相关的选项,包括: 用户选项 中的所有内容。 扩展工具,包括已配置的扩展列表。 其他工具中的UI相关选项,例如 Target 组件下 站点地图 的选定视图。 项目级配置包含在特定目标应用程序上执行的工作相关的选项,包括: 项目选项中的所有内容。 单个Burp工具中的非UI相关选项,例如 代理 (Proxy) 和 扫描器 (Sc

  • 配置文件(.yml)用于使用Dropwizard(0.9.2-最新版本)开发的rest api。api所需的大部分凭证(如数据库密码、密钥等)都存储在配置文件中。 我们已经根据在dropwizard配置参考中找到的参考中提到的项目实现了大部分内容。 问题很清楚。它有多安全(将这些信息以纯文本形式存储在配置文件中)。)?如果不是,正确的做法是什么?

  • 一、简介 此配置,可设置后台登陆最大失败次数,以防密码被试出。 其它配置相对简单不在详述。 二、功能演示 如图:

  • 第一步是创建我们的Java配置。这个配置在你的应用程序中创建一个springSecurityFilterChain 的Servlet的过滤器,负责所有安全(例如 保护应用程序的URL,验证提交的用户名和密码,重定向到登陆的表单等等)。你可以在下面找到大部分Java配置项的例子: import org.springframework.beans.factory.annotation.Autowire