2016-08-22 4 views
4

아마 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의 데이터 구조를 제한하는 적절한 방법은 무엇입니까? 나는 그것을 전혀해야합니까? 사용자가 데이터베이스를 휴지통으로 채우지 않게하려면 어떻게해야합니까?

+0

내가 따라 잘 모르겠어요 왜' "$ 기타": { ".validate"거짓}'당신이 원하는 없습니다. 그러나이를 무시하고 승인을 받으면 취소 할 수 없다는 사실을 알고 있습니까? 그래서'$ product' 아래의''.write ": true'는'$ other' 아래의''.write": false'가 무시된다는 것을 의미합니까? – cartant

+0

@cartant 유효성 검사가 작동하지 않는 이유를 명확히하기 위해 질문을 업데이트했습니다. –

답변

7

여기에 몇 가지 일반적인 Firebase 보안 구덩이가 있습니다. 가장 일반적인 방법은 권한이 계단식으로 내려가는 것입니다. 트리에서 특정 수준에 대한 읽기 또는 쓰기 권한을 부여한 경우 낮은 수준에서 해당 권한을 제거 할 수 없습니다.

"$other": { 
    ".read.": false, 
    ".write": false, 
} 

당신이 .validate 규칙이 다르다는 것을 깨달아야 문제를 해결하려면 : 데이터가 (당신이 더 높은 이미 부여 읽기/쓰기 한 수준을했습니다 이후)이 규칙은 헛된 것을 의미

모두 유효성 검사 규칙이 충족 될 때만 유효하다고 간주됩니다. 그래서 당신은 유효성 검사 규칙으로 $other 데이터를 거부 할 수 있습니다 :

{ 
    "rules": { 
     "$product": { 
      ".read": true, 
      ".write": true, 
      ".validate": "newData.hasChildren(['price'])", 
      "price": { 
       ".validate": "newData.isNumber()" 
      }, 
      "$other": { 
       ".validate": false 
      } 
     } 
    } 
} 
+0

이렇게하면 해결됩니다. 재미있는 점은 (질문에서 간략히 언급 한 것처럼)이 해결책을 시도했다고 생각했지만, 어쨌든 그걸 해결할 수있었습니다. 어느 쪽이든, 당신의 대답은 또한 유효성 검사와 나에게 훨씬 더 명확한 차이점을 만들어주었습니다. 감사합니다. :) –

+0

볼트로 어떻게 보이나요? – Waltari

관련 문제