4
내가있어

중포 기지 데이터가이 같은 작은 선물을 구조 만 사용자의 콘텐츠를 읽기 허용 - 로그인 한 사용자가 작업을 만들면 사용자의 uid (예 : simplelogin : 2)가 생성중인 작업의 사용자 부분에 배치됩니다. 사용자가 로그인 할 때중포 기지 보안 규칙은

, 그들은을 사용하여 그들의 작업을 볼 수 있습니다

$firebase(ref.orderByChild('user').equalTo(User.uid)); 

다음 단계는 내가 사투를 벌인거야 어디있는 데이터를 보호하는 것입니다. 나는 시도했다 : 또한

"tasks": { 
    ".indexOn": ["user", "order"], 
    ".write": "auth != null", 
    ".read": "auth != null && data.child('user').val() == auth.uid", 
    "$task": { 
     "title": { 
      ".validate": "newData.isString() && newData.val().length <= 1000" 
     }, 
     "completed": { 
     }, 
     "time_added": { 
      ".validate": "newData.val() <= now" 
     }, 
     "order": { 
     }, 
     "user": { 
      ".validate": "newData.val() != null && newData.val() == auth.uid" 
     }, 
     "$other": { 
      ".validate": false 
     } 
    } 
    } 

과 :

"tasks": { 
    "$task": { 
     ".indexOn": ["user", "order"], 
     ".write": "auth != null", 
     ".read": "auth != null && data.child('user').val() == auth.uid", 

     "title": { 
      ".validate": "newData.isString() && newData.val().length <= 1000" 
     }, 
     "completed": { 
     }, 
     "time_added": { 
      ".validate": "newData.val() <= now" 
     }, 
     "order": { 
     }, 
     "user": { 
      ".validate": "newData.val() != null && newData.val() == auth.uid" 
     }, 
     "$other": { 
      ".validate": false 
     } 
    } 
    } 

그러나 내가 얻을 :

Error: permission_denied: Client doesn't have permission to access the desired data.

어디서 잘못된 것입니까?

+1

:

"tasks": { "$task_id" { ".read": "auth != null && data.child('user').val() == auth.uid", } 

또한의 예를 참조하십시오. 여기에는 쿼리 사용이 포함됩니다. 본질적으로 쿼리는 일치하는 하위 항목을 얻기 위해 작업을 읽어야하기 때문에 부모 (즉, 반복) 수준에서 읽기 액세스가 허용되지 않으므로 실패합니다. – Kato

+0

안녕하세요 @ 카토 - '사용자'입력란에 사용자 (1 명 이상) 만 모든 작업에 액세스 할 수 있어야하는 상황에서 어떤 것이 좋습니다. 아니면 데이터를 잘못 구성하고 있습니까? – mcnamee

+0

[구조 데이터] (https://www.firebase.com/docs/web/guide/structuring-data.html) 가이드를 확인하십시오. 인덱스를 다루는 비례 데이터 작성이라는 제목의 섹션이 있습니다. 여기에 몇 가지 변종이 필요할 것입니다. – Kato

답변

4

tasks 컬렉션에는 user 자식이 없습니다. 각 특정 작업에는 user 자식이 있습니다. 그래서 당신은 당신의 읽기 규칙 한 단계 아래로 이동해야합니다 당신은 필터로 보안 규칙을 사용할 수 없습니다 https://www.firebase.com/docs/security/guide/user-security.html

+0

시간 내 주셔서 감사합니다. @ 프랭크 - 불행히도 여전히 작동하지 않습니다. 도움이 될 경우 보안 규칙에서 추가 정보를 추가했습니다. – mcnamee

+0

이 답변은 올바르게 필터링하려고합니까? 그리고 나는 필터링이 불가능하다고 생각했다. –

+0

좋은 지적 @ChristiaanWesterbeek! 전에 그것을 놓친 지 아니면 편집에 있었는지 확실하지 않습니다. 그것에 대한 답변을 추가 할 수 있습니까? 내가 upvote거야. :-) –