2017-12-29 30 views
0
"display": { 
     ".read": "auth != null", 
     ".write": "auth != null", 
     "abc": { 
      ".indexOn": ["hhh"], 
      "$display_id": { 
      "aaa": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "bbb": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "ccc": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "ddd": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "eee": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "fff": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "ggg": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "hhh": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "iii": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "jjj": {".validate": "newData.isString() && newData.val().length > 0"}, 
      "kkk": {".validate": "newData.val() == $display_id"}, 
      "lll": {".validate": "newData.isNumber()"}, 
      "$others": {".validate": false} 
      } 
     } 
} 

위의 코드는 Firebase 데이터베이스 규칙 섹션에있는 내 경로 규칙 중 하나의 스 니펫입니다.Firebase 규칙은 읽기는 허용하지만 쓰기는 허용하지 않습니다.

참조 용으로 display_id은 푸시 값이고 lllcalendar.getTimeInMillis()에서 가져온 long 형입니다.

나는 오랫동안 이것을위한 해결책을 찾으려고 노력해 왔으며 나는 포기할 직전에있다.

이들은 지금까지 몇 가지 관찰 결과입니다.

  1. 규칙 트리에서 "디스플레이"위 더 .read 또는 .write이 없습니다, 그래서 읽기에 대한 또는 데이터를 쓰는 모든 계단식 오류가 없도록해야한다. 나는 좋은 데이터를 읽을 수 있기 때문에
  2. 내 앱의 자바 클래스 모델에서 문제가 안
  3. 가 나는
  4. 어떤이 안 auth != null로 데이터를 읽을 수 있기 때문에 어떤 인증 오류이어야한다 규칙 애플릿으로 주석 오류가 발생하여 현재 오류가 발생하지 않습니다.

실종되었습니다. 내 애플 리케이션을 통해이 노드에 데이터를 쓸 때, 나는 Permission Denied를 계속 얻는다.

의견이 있으십니까?

+1

문제를 일으키는 쓰기 작업을 포함하도록 질문을 업데이트하십시오. –

답변

0

죄송합니다. 나는이 문제를 해결할 수 있었다. 내가 필요한 코드 블록을 게시하지 않으면 죄송합니다.

문제는 불행히도 계단식 문제이며, 나는 어떤 이유로 그것을 오해했을 것입니다.

특정 노드에 읽기 및 쓰기 규칙을 넣으려면 최소한 특정 노드에서 참조해야하며 설명서가 더 명확 해 지길 원하지만이 오류를 실현 한 후에는 모든 것이 완벽하게 작동했으면합니다.

그래서 예를 들어 나는 이런 식으로 뭔가있는 데이터베이스 구조가있는 경우 :

"display": { 
    ".read": "auth != null", 
    ".write": "auth != null", 
    "abc": { 
     ".indexOn": ["hhh"], 
     "$display_id": { 
     "aaa": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "bbb": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "ccc": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "ddd": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "eee": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "fff": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "ggg": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "hhh": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "iii": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "jjj": {".validate": "newData.isString() && newData.val().length > 0"}, 
     "kkk": {".validate": "newData.val() == $display_id"}, 
     "lll": {".validate": "newData.isNumber()"}, 
     "$others": {".validate": false} 
     } 
    } 
} 

내 코드를, 나는 즉시 해당 노드에 대한 쿼리에 따라 행동하기 전에이 작성해야 (에서 onCreate에서이 글을 쓰는()) 도움이 될 것입니다 다음 중포 기지 규칙 문서의 거대한 오해

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference("display") //reference immediately to the "display" node, where you intend to put the read and write rules; 

희망이 도움이, 그리고 사과는.