2014-09-11 2 views
1

firebase를 사용하여 간단한 채팅 응용 프로그램을 만들고 사용 가능한 보안 설정 문제가 발생했습니다.읽기 권한이있는 firebase 노드의 하위 노드를 제외합니다.

이 응용 프로그램의 데이터 모델은 매우 간단하고

rooms:[ 
    people:[ 
     { 
      name: //string 
      status: // what the user is doing, typing, still connected etc. 
      secret: // the problem is with this 
     } 
    ], 
    messages:[ 
     {/* message to and payload*/} 
    ] 
] 

을 다음과 같이 문제가 난 단지 [I] .people는 [j]가 업데이트 할 수 있도록 방을 생성 한 사용자를 원하는이다 그 사람의 상태.

하지만 I를 중포 기지에 새가되는

personRef.update({ 
    'status': // newStatus 
    'secret': // used to authorize the update 
}) 

이 가진 문제는 난 단지 비밀 기록을 확인하고 액세스 권한을 부여 할 수있는 방법을 찾을 수 있습니다을 다음과 같이 I 업데이트 기능을 사용할 수있을 것 동시에 사람들. 즉, 객실 [i] .people에있는 데이터를 가져올 수있는 사람이 필요합니다. 객실 [i] .people은 "fire"보안 규칙에 따라 ".read"를 가져야합니다. 그러나 이것은 모든 어린이에게 읽기 액세스 권한을 부여 할 것이고 방 안의 누구나 다른 사람의 업데이트 비밀을 볼 수있을 것입니다. 나는이 문제를 잘못 생각하고 있는가?

부모에게 읽기 액세스 권한을 부여하지만 일부 어린이는 결과에서 제외시킬 수 있습니까?

감사합니다.

+0

당신이 당신이 그들을 인증하는 사람의 비밀을 사용하는 방법에 더 많은 비트를 확장 할 수의 (a에 저장 쿠키?) 또한, 어떻게 사용자를 로깅합니까? 간단한 로그인? – mimming

+0

@JennyTong 나는 그 비밀을 JS에 저장하고있다. 그것의 단일 페이지 앱이다. 그렇습니다. 다시 떠난다면 다시 돌아와야한다는 뜻입니다. 쿠키가 비록 – Aaron

답변

2

인증을 구현하는 데 비밀을 사용하는 방법에 따라 약간 달라 지지만 데이터를 비정규 화하는 것이 트릭을 수행 할 것으로 생각됩니다. 이런 식으로 뭔가를 시도 :

people-secrets:[ 
    <user's ID>: { 
     secret: 
    }, ... 
], 
rooms:[ 
    people:[ 
     { 
      name: //string 
      status: // what the user is doing, typing, still connected etc. 
     } 
    ], 
    messages:[ 
     {/* message to and payload*/} 
    ] 
] 

보안 규칙 세그먼트에 당신을 허용 것이 그 :

{ 
    "rules": { 
    "people-secrets": { 
     "$user_id": { 
     ".read": "$user_id === auth.uid", 
     ".write": "$user_id === auth.uid" 
     } 
    }, 
    "rooms": { 
     "$room_id": { 
     "$user_id": { 
      ".read": "auth.uid != null", 
      ".write": "$user_id === auth.uid && root.child('people-secrets/' + auth.uid + "/secret") === <that token>" 
     } 
     } 
    } 
+0

Awww이지만 쿠키에 저장되어 있다면 같은 문제 일 것이라고 생각합니다. 따라서 익명 사용자 일지라도 고유 한 ID가 사용자에게 주어집니다. 그게 내가 놓친 요점이야. 귀하의 솔루션은 그때와 함께 잘 작동하는 것 같습니다, 감사합니다! – Aaron

관련 문제