2013-04-11 4 views
6

Firepad를 (대부분 Firebase가 아닌) 프로젝트에서 사용하고 싶지만 문제를 해결하는 가장 좋은 방법을 찾는 데 문제가 있습니다.Firebase JSON 보안 및 배열

기본적으로 많은 사용자가 있으며 각 사용자는 여러 그룹의 회원이 될 수 있습니다. 이 "그룹"에는 사용자가 편집 할 수있는 자체 Firepad가 있습니다. 우리는 이미 MySQL을 사용하여 심도있게 개발 된 데이터베이스 구조를 가지고 있으며 사용자 데이터를 당장 Firebase에 마이그레이션하고 싶지 않기 때문에 우리는 더 창조적이라고 생각했습니다.

사용자가 소속되어 있지 않은 그룹의 Firepad를 편집 할 수 없도록하고 싶습니다. 따라서 우리는 인증 토큰의 일부로 사용자 ID와 사용자가 속한 그룹 목록을 함께 보내려고합니다. 그런 다음 Firebase JSON 보안 시스템을 사용하여 현재 편집중인 Firepad가 사용자가 속한 그룹 목록에 있는지 확인할 수 있습니다.

문제는 JSON 시스템이 많은 명령을 받아들이지 않는 것입니다. indexOf가없고 auth 변수에 hasChild을 호출 할 수 없습니다.

모든 데이터를 Firebase로 마이그레이션하지 않고 사용자가 속한 그룹의 Firepad 만 편집 할 수 있도록하려면 어떻게해야합니까? (또는 MySQL 데이터베이스에 하나, Firebase에 데이터베이스 하나씩)

답변

9

트릭은 배열 대신 객체를 사용하여 그룹을 저장하는 것입니다. 이것을 더 쉽고/더 직관적으로 만드십시오).

{ 
    ... 
    "$group": { 
     ".read": "auth.groups[$group] == true", 
     ".write": "auth.groups[$group] == true" 
    } 
} 

하고 다음 사용자가 읽은 것/쓰기 액세스 : 당신이 뭔가를 할 수 보안 규칙에서 다음

{ userid: 'blah', groups: { 'group1': true, 'group2': true, ... } } 

그리고 : 그래서 당신의 인증 토큰에, 당신은 뭔가를 저장하는 것/groups/< 그룹 > < 그룹 >이 (가) 인증 토큰에있는 경우에만.

+0

빙고. 아마도 그렇게 생각했을 것입니다. 그러나 대괄호로 멤버에 액세스하는 것이 가능하다는 설명이 도움이됩니다. 고맙습니다! –

+0

마이크,이 지역에서 개선 된 점이 있습니까? auth 변수에 사용할 수있는 기능을 설명하는 문서가 있습니까? – Samuel

+0

@ Samuel 여기에는 특별한 변화가 없습니다. 일반적으로 auth에는 기능이 없으며 인증 토큰의 데이터 일뿐입니다. 사용할 수있는 유일한 "함수"는 인증 데이터에 문자열이있는 경우 부분 문자열/정규식 검색과 같은 몇 가지 방법이 있습니다. https://www.firebase.com/docs/security/api/string/ –