我遇到了firebase安全规则的问题,而且我不是100%我错的地方。我想也许我的数据结构错了:
if(data.cust)
{
$.each(data.cust,function(indx,item){
alert(item.email);
});
}
应用程序中的所有内容都可以正常工作,但当我开始添加安全规则时,我获得了访问被拒绝的错误。我只是想知道我的数据结构是否正确,或者安全规则是否完全错误?
安全规则:
{
"users": {
"uid": {
"displayName": "Name";
}
},
"modules": {
"id": {
"title": "buttons",
"uid": "(user id string)"
},
"id": {
"title": "navbars",
"uid": "(user id string)"
}
},
"snippets": {
"id = moduleID": {
"id (of snippet)": "(id string)" {
"uid (user ID)": "(string)",
"body": {
"css": "(some code)",
"html": "(Some code)",
"name": "(string)",
"description": "(string)"
}
}
}
}
任何建议都将不胜感激。
答案 0 :(得分:1)
根据数据结构,似乎规则格式不正确。
规则在每个节点中都有$ uid,但您的数据并不匹配。用户有uid,但模块有id,snippets有id = moduleID。
$ uid是一个保存节点名称的变量,因此它可以在{}内引用,因此您应该(为了便于阅读)将其他两个节点中的变量重命名为在每个{}内更有意义的内容。就像模块一样,请使用$ module_id。
然而。我认为这是你想要将读取片段和模块限制为经过身份验证的用户。为此,您可以引用用户节点。
.read规则就是这样的
"modules": {
"$module_id": {
".read": "auth != null && root.child('users/' + auth.id).exists()
}
因此,您的模块节点可以由auth&d用户读取,并且他们的uid也会出现在用户/节点中
答案 1 :(得分:0)
您是否将Firebase Bolt编译器用于规则?我不得不写一些复杂的规则,手工制作很快就会让人感到困惑。
下面是它的样子。很容易进行更改,编译并试用它们。
Feature: Test the validation on the person object
Background:
Given the language is 'english'
Scenario: Create a person with firstName empty and check we have a violation error message on it
Given we create a new person
And we set firstName ''
And we set lastName 'smith'
When we apply validation
Then we should have 1 violation
And we should have a error message on 'firstName' that says 'may not be empty'
这是它吐出的json:
//current logged in user
isUser(uid) = auth != null && auth.uid == uid;
//does this module id exist
hasValidModule(module_id) = root['modules'][module_id] != null;
//dont let anyone read or write to top node
path / {
read() = false;
write() = false;
}
path /users/$user_id
{
write() = isUser($user_id);
read() = isUser($user_id);
}
path /snippets/$module_id/$snipit_id/$user_id
{
write() = isUser($user_id) && hasValidModule($module_id);
read() = isUser($user_id);
}
path /modules/$user_id
{
write() = isUser($user_id);
read() = isUser($user_id);
}
Firebase博客上有一些信息,但真正帮助我的文档是
https://github.com/firebase/bolt/blob/master/docs/language.md