$ addedByUser는 항목의 "중첩 된 하위 항목"이 아니기 때문에이 예제에서 잘못된 지점에 있지만 자식 항목의 특성입니다.
"items": {
"$item": {
".read": "data.child('addedByUser').val() === auth.uid"
}
}
이것은 Firebase docs에서 올려진다 : 데이터와
:
{
"messages": {
"message0": {
"content": "Hello",
"timestamp": 1405704370369
},
"message1": {
"content": "Goodbye",
"timestamp": 1405704395231
},
...
}
}
의 I (이 테스트 한하지 않음) 당신의 라인을 따라 뭔가를 찾고있을 것이라고 제안 규칙이 될 수있다 :
{
"rules": {
"messages": {
"$message": {
// only messages from the last ten minutes can be read
".read": "data.child('timestamp').val() > (now - 600000)",
// new messages must have a string content and a number timestamp
".validate": "newData.hasChildren(['content', 'timestamp']) && newData.child('content').isString() && newData.child('timestamp').isNumber()"
}
}
} }
잘못된 사용자가 다른 사용자의 (단수) 항목을 읽지 못하도록 방지하고 사용자 SZ825V ...가 "items/-KKTDD ..."에 대한 읽기를 수행하지 못하게합니다. 단, 사용자 SZ825V가 "항목"에 대한 읽기를 수행하려면 사용자가 자신의 문서 및 다른 사람의 문서를 읽으려고하기 때문에 읽기가 완전히 실패합니다. 이것은 원자 적 방식으로 행동하는 규칙을 가진 firebase의 중요한 개념입니다. 즉, 읽기의 일부가 실패하면 전체 읽기가 수행됩니다. 이 규칙을 적용하는 또 다른 방법은 규칙이 필터 역할을하지 않는다는 것입니다. 이것이 원하는 기능이라면 구조를 재정렬해야 할 수 있습니다.
{
"users": {
"abcdef-user-id": {
"items": {
"fjeiwofjewio": {
"name": "apple",
"qty": "23"
}
}
},
"ghijkl-user-id": {
"items": {
"regrewgreh": {
"name": "passionfruit",
"qty": "18"
}
}
}
}
및 보안 규칙이있을 수 있습니다 : 다음과 같은 예는 수
.. {
"users": {
"$userId": {
".read": "auth.uid === $userId"
}
}
}
위의 방법은 당신은 단지 사용자가 사용자 자신의 데이터 트리에서 항목을 읽을 수 있도록하려면 가정입니다 아무도 다른 사용자의 항목을 볼 수 없게됩니다. 다른 사용자가 다른 사용자의 항목 중 일부를 볼 수있게하려면 다른 접근 방식이 필요하며 이는 다른 SO 질문입니다.
나는 첫 번째 실패를 발견했다고 생각합니다. ".read 및 .write 규칙은 하향식에서 작동하며, 더 얕은 규칙을 무시하는 규칙은 더 얕습니다."는 https://firebase.google에서 설명합니다.observeEventType (.Value, withBlock : {snapshot in var newItems = [Item]() snapshot.children의 항목에 대한 데이터입니다. com/docs/database/security/securing-data # read_and_write_rules_cascade –