如何允许从组中读取特定项目但阻止列出组成员
通常的做法是通过创建项目 ID 为键的简单值节点来创建项目组。例如,我们可以通过在 /administrators/$user_id
创建一个值为 true
的节点,将用户添加到管理员组。出于安全原因,我们不希望任何人知道管理员是谁,但我们仍然想检查 Authenticated 用户是否是管理员。有了这些规则,我们可以这样做:
{
"rules": {
"administrators": {
// No one can list administrators
".read": "false",
"$uid": {
// Authenticated user can check if they are in this group
".read": "$uid === auth.uid",
// Administrators can write
".write": "data.parent().child(auth.uid).val() === true",
// Allow only add or delete, no duplicates
".validate": "!data.exists() || !newData.exists() || newData.isBoolean()",
}
}
}
}