2016-10-21 2 views
1

이 데이터 구조가 있습니다.Firebase 데이터베이스 규칙. .set (null) 호출로 노드가 삭제되지 않도록하는 방법

root 
    -foo 
     -key0 
      -bar1:baz1 
      -bar2:baz2 
     -key1 
      -bar1:baz1 
      -bar2:baz2 

그리고이 규칙 구조가 있습니다. 나는이 firebase.database().ref('/foo').remove() 또는 자바 스크립트 콘솔이 firebase.database().ref('/foo').set(null);을하려고 할 때

"foo":{ 
    ".read":true, 
    ".write":"auth != null", 
    ".validate":"newData.hasChildren(['bar1', 'bar2'])" 
} 

는하지만, 규칙에 .validate 존중되지 않는 및 foo 노드의 데이터가 삭제되고있다.

특정 사용자와 연관되지 않은 데이터베이스 노드를 보호합니까?

답변

2

당신이 newData.val()하지 null 것을 확인할 수 있습니다 제거되는 /foo을 방지하기위한 방법은 다음과 같습니다 쓰기가 허용 되었기 때문에

"foo": { 
    ... 
    ".write": "(auth != null) && (newData.val() != null)", 
    ... 
} 
+0

'유효성 검사'를 사용하지 않으시겠습니까? – CENT1PEDE

+0

그것은 작동했지만 이상하지 않습니까? 아니면 나는이 방법이 이상하다고 생각하는 이상한가? – CENT1PEDE

+0

어쨌든, 감사합니다! :) – CENT1PEDE

2

검증 단계가 완전히 생략됩니다.

참고 : .validate 규칙은 null 이외의 값을 평가 캐스케이드을하지 않습니다 있습니다.

데이터 보호를위한 firebase 설명서의 유용한 비디오로 다음 섹션을 읽어보십시오.

https://firebase.google.com/docs/database/security/

당신은 당신의 규칙을 수정해야합니다.

"foo":{ 
    ".read":true, 
    ".write":"auth != null && newData.exists()", 
    ".validate":"newData.hasChildren(['bar1', 'bar2'])" 
} 
관련 문제