아마 SQL의 관점에서이 문제를 너무 많이 다루고 있지만 노드를 채울 수있는 자식을 적절하게 제한하는 방법을 이해하는 데 어려움을 겪고 있습니다."다른 모든 것을 잡아라"Firebase 데이터베이스 규칙
임의의 이름으로 제품을 기록하고 싶다고 말합니다. 각 제품에는 price
이 있어야하지만 다른 것은 허용되지 않습니다.
내 본래의 접근법은 모든이 다소 switch 문에 기본 절처럼 (AN $other
노드에 액세스 명시 적으로 price
노드에 대한 쓰기 권한을 부여하고 제거하는 price
아이를 포함 newData의를 필요로하는 제품에 .validate
규칙을 추가했다) :
{
"rules": {
"$product": {
".read": true,
".write": true,
".validate": "newData.hasChildren(['price'])",
"price": {
".write": true,
".validate": "newData.isNumber()"
},
"$other": {
".read.": false,
".write": false,
}
}
}
}
이것은 작동하지 않습니다. {"price": 1234, "foo": "bar"}
과 함께 새 제품을 추가하는 것은 여전히 허용됩니다. (내가 잘못 했어, 어쨌든.)".validate": false
규칙을 $other
에 추가하면 아무 것도 대신 허용되지 않습니다 (예 : {"price": 1234}
은 허용되지 않음).
내가 여기에서하려고하는 것과 비슷한 것을 구현하는 방법이 있습니까? 그렇지 않다면 Firebase의 데이터 구조를 제한하는 적절한 방법은 무엇입니까? 나는 그것을 전혀해야합니까? 사용자가 데이터베이스를 휴지통으로 채우지 않게하려면 어떻게해야합니까?
내가 따라 잘 모르겠어요 왜' "$ 기타": { ".validate"거짓}'당신이 원하는 없습니다. 그러나이를 무시하고 승인을 받으면 취소 할 수 없다는 사실을 알고 있습니까? 그래서'$ product' 아래의''.write ": true'는'$ other' 아래의''.write": false'가 무시된다는 것을 의미합니까? – cartant
@cartant 유효성 검사가 작동하지 않는 이유를 명확히하기 위해 질문을 업데이트했습니다. –