我目前有一个类似以下的数据库结构。如果无法在Firebase实时数据库安全规则中循环,我如何基于用户对多个组的访问来保护数据?要遵循的例子...
数据库结构:
// list of different groups a user can belong to.
// they can belong to multiple groups.
"userGroups": {
"groupA": ...
"groupB": ...
"groupC": ...
}
// each user has a list of group ids they belong to
"users": {
"userA": {
groups: ['groupA', 'groupB'],
},
"userB": {
groups: ['groupB'],
}
}
// various nodes in the database an admin sets restriction on content
// so specific data can only be access by specified group
"someFunData": {
"data1": {
authorisedGroups: ['groupA', 'groupB'],
},
"data2": {
authorisedGroups: ['groupB'],
}
}
我如何在someFunData
上指定安全规则,以基于someFunData/$dataId/authorizedGroups
中指定的任何组与当前用户的组之间的匹配来限制它?
首先,用户组
可能会产生误导。它可能意味着“每个用户的组”。如果没有任何其他类型的组,可以将其称为组
。
在一个类似的场景中,我为每个影响用户应该看到的路径创建了一个云函数。
const updateUserFunData = (path: string) => {
return functions.database.ref(path).onWrite(async (data, context) => {
// Download any required data, calculate what changes should be made,
// then use a multi-path update to save these changes, like this:
await rootRef.child('userFunData').update({
[uid1 + '/' + data1]: true, // or a complete copy of the data
[uid1 + '/' + data2]: null, // use null to delete
});
});
};
export const onUserGroupsChange = updateUserFunData('users/{uid}/groups');
export const onFunDataGroupsChange = updateUserFunData('someFunData/{dataId}/groups');
然后客户端可以读取userFunData/$uid
以获取他们的数据ID(然后获取每个funData
),并且规则可以检查是否存在userFunData/$uid/$dataId
,以允许或拒绝读取。
如果您想跳过中间funData ID查询和以下所有查询的同步,您可以用数据的完整副本替换true
,为其他应该更改该数据的数据库更改添加触发器,并拥有客户端只查询userFunData/$uid
,其中应该包含他们应该看到的所有数据。
您评论说,维护每个用户的数据列表并不实际。您可以维护每个组的数据列表,并让每个用户获得各自组的数据。规则将检查用户是否存在于正在读取的组的用户中。您必须将每个组(或每个用户的组)的用户保存为映射,而不是数组。
我有一个应用程序,存储256行数字,指示网格视图中每个256个单元格的背景颜色。目前所有的值都是-16449536,表示简单的黑色。 以下是我在Firebase数据库中的JSON结构 在onCreative方法中,我使用for循环为每个单元格读取256次: 并非所有网格都是黑色的。每次我重新打开应用程序以触发onCreate方法时,网格模式都会有所不同。我是否达到了firebase实时数据库的某些
我有以下Firebase实时数据库连接到我的Flatter项目: 我对flutter和fire base相当陌生,我知道在我的flutter项目中访问此数据库中数据的一种方法是使用数据库引用变量。所以我有以下参考变量: 现在,如何使用此itemRef访问数据库中的温度和脉冲值?
我在一个Android应用程序中使用Firebase数据库,每次用户启动时,我都会在数据库中存储一些值,为此我会执行以下操作: 正如您在子方法中看到的,如果称为“usrId”,它将创建usrId目录,并在其中添加所有neccesary信息。但是我想为每个用户创建目录,所以我尝试传递usrId变量作为参数。但它不起作用。当我调试代码时,调试器说本地var usrId无法识别,我的问题是如何在Fire
我在Firebase项目中使用多个数据库。主(默认)数据库的云函数工作得很好,但是,我不能让它们用于辅助数据库。例如,我想在具有管理员权限的节点上发出读取请求: 这在主数据库中有效,但是,如果我想在另一个数据库上执行该命令,则不起作用: 虽然已经部署了这些功能,但是当我试图执行云功能时,控制台上出现了一个错误。 以下是带有https触发器的云函数的代码: 下面是Firebase控制台中的错误日志:
我需要一个简单的方法来阻止任何人将下面的代码复制到他们的inspector工具中,从而添加错误的分数。没有用户,我只想限制浏览器的写入权限。Firebase实时数据库中的安全规则有没有办法做到这一点?现在我只有“.read”:true“.write”:true和验证。