2016-12-18 3 views
0

현재 사용자가 노드를 null로 설정하고 해당 노드의 모든 데이터를 삭제하지 못하도록 Firebase 보안 규칙을 만들고 있습니다. Firebase 데이터베이스 보안 규칙 삭제

내 스키마입니다

{ 
    "folder" : { 
    "item1" : { 
     "dataset1" : { 
     "data1" : 123, 
     "data2" : 456, 
     "data3" : 789 
     } 
    } 
    } 
} 

이 내 규칙 인 내가 갖는 시뮬레이터에 내장 된 이러한 결과 사용

{ 
    "rules": { 
    "folder": { 
// users cannot delete items in the node folder 
     ".write": "newData.exists()", 
// item is a variable 
     "$item": { 
     "dataset1": { 
//  dataset1 must have certain nodes and can't be deleted (set to null) 
      ".validate": "data.hasChildren(['data1', 'data2', 'data3']) && newData.exists()", 
      "data1": {".validate": "newData.isNumber()"}, 
      "data2": {".validate": "newData.isNumber()"}, 
      "data3": {".validate": "newData.isNumber()"}, 
//  using the variable $other means any node that isn't data1, data2, data3 is denied 
      "$other": {".validate": false} 
     } 
     } 
    } 
    } 
} 

:

The write is properly denied and doesn't let user set folder node to null

이 작동을 location은 "/ folder/item1"및 "/ folder/item1/data"로 설정됩니다. 내가 DATA1에 깊은 노드를 가지고 있다면 쓰기가 허용 되었기 때문에 SET1 "

However when location is set to "/folder/item1/dataset1/data1" the write is allowed and the data is deleted.

그들은 모두 삭제됩니다.

읽어 주셔서 감사합니다. 답변을 열어서 스키마를 변경할 필요가 없습니다.

답변

0

내가 무엇을 요구하고 있는지 분명하지 않습니다. 하지만 규칙에는 몇 가지 문제가 있으므로 질문에 대한 답변을하기를 바랍니다.

  1. 낮은 수준에서 제거 할 수없는 /folder에 대한 쓰기 권한을 부여합니다.
  2. 데이터가 /folder 아래에 남아있는 한 모든 쓰기가 허용됩니다. 염두에 두어야 할 것은 newData은 쓰기 작업 후에 존재하므로 그 위치의 데이터입니다. 그것은 작성된 새로운 데이터 만이 아닙니다.
  3. .validate 규칙을 사용하여 삭제를 방지하려고한다는 인상을 받았습니다. 데이터를 삭제할 때 유효성 검사가 수행되지 않으므로 .validate 규칙을 사용하여 삭제를 방지 할 수는 없습니다.

# 2이 (가) 현재 문제를 일으키는 것으로 의심됩니다.

+0

안녕하세요, 2 번에서 권장 사항을 사용했습니다. "newData.hasChildren ([example, example])"을 사용하여 해당 자식을 삭제할 수 없도록했습니다. 당신의 도움을 주셔서 감사합니다! –

관련 문제