firebase-database
Firebase 실시간 데이터베이스 규칙
수색…
비고
Firebase Realtime Database Rules는 데이터베이스에 대한 읽기 및 쓰기 액세스 권한을 가진 사용자, 데이터 구성 방법 및 존재하는 인덱스를 결정합니다. 이 규칙은 Firebase 서버에 저장되며 항상 자동으로 시행됩니다. 모든 읽기 및 쓰기 요청은 규칙에서 허용하는 경우에만 완료됩니다. 기본적으로 인증 된 사용자 만 데이터베이스에 대한 전체 읽기 및 쓰기 액세스를 허용하도록 규칙이 설정됩니다. 이것은 규칙을 사용자 정의하거나 인증을 설정할 때까지 데이터베이스를 악용으로부터 보호하기위한 것입니다.
Firebase 데이터베이스 규칙은 JavaScript와 유사한 구문을 가지며 4 가지 유형이 있습니다.
권한 부여
사용자를 식별하는 것은 보안의 일부일뿐입니다. 그들이 누구인지 알게되면 데이터베이스의 데이터에 대한 액세스를 제어하는 방법이 필요합니다. Firebase 데이터베이스 규칙을 사용하여 각 사용자의 액세스를 제어 할 수 있습니다. 예를 들어, 다음은 누구나 경로 /foo/ 를 읽을 수있는 보안 규칙 집합이지만 쓰기 권한은 없습니다.
{
"rules": {
"foo": {
".read": true,
".write": false
}
}
}
.read 및 .write 규칙은 캐스 캐 이드 .write ruleset은 / foo / 경로의 모든 데이터와 /foo/bar/baz 와 같은 더 깊은 경로에 대한 읽기 액세스 권한을 부여합니다. 액세스를 허용하는 .read 및 .write 규칙은 액세스를 허용하지 않는 데이터베이스의 다른 규칙보다 우선합니다. 즉, 적용 가능한 모든 .read 및 .write 규칙은 함께 OR 연산됩니다. 그래서 액세스 읽기 /foo/bar/baz 경로에서 규칙 경우에도 여전히이 예에서 부여 할 것을 /foo/bar/baz false로 평가했다.
Firebase 데이터베이스 규칙에는 다른 경로, 서버 측 타임 스탬프, 인증 정보 등을 참조 할 수있는 내장 변수와 함수가 포함되어 있습니다. 다음은 인증 된 사용자에 대한 쓰기 권한을 /users/<uid>/ 부여하는 규칙의 예입니다. 여기서는 Firebase 인증을 통해 얻은 사용자의 ID입니다.
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
데이터 유효성 검사
Firebase Realtime Database는 스키마가 없습니다. 이렇게하면 개발할 때 항목을 쉽게 변경할 수 있지만 일단 앱을 배포 할 준비가되면 데이터 일관성 유지가 중요합니다. 규칙 언어는 포함 .validate 당신이 사용하는 것과 동일한 식을 사용하여 유효성 검사 논리를 적용 할 수 있습니다 규칙 .read 과 .write 규칙을. 유일한 차이점은 쓰기가 허용되도록 모든 관련 유효성 검사 규칙을 true로 평가해야한다는 것입니다 (즉, 적용 가능한 모든 .validate 규칙이 .validate 되어 데이터베이스 쓰기가 .validate ).
이 규칙은 /foo/ 쓰여지는 데이터가 100 자 미만의 문자열이어야한다고 강요합니다 :
{
"rules": {
"foo": {
".validate": "newData.isString() && newData.val().length < 100"
}
}
}
유효성 검사 규칙은 .read 및 .write 규칙과 동일한 모든 기본 제공 함수 및 변수에 액세스 할 수 있습니다. 이를 사용하여 데이터베이스의 다른 위치, 사용자의 신원, 서버 시간 등을 인식하는 유효성 검사 규칙을 만들 수 있습니다.
데이터베이스 인덱스 정의
Firebase Realtime Database는 데이터의 순서 지정 및 질의를 가능하게합니다. 작은 데이터 크기의 경우 데이터베이스는 임시 쿼리를 지원하므로 일반적으로 인덱스는 개발 중에 필요하지 않습니다. 그러나 앱을 시작하기 전에 앱 성장에 따라 계속 작동하도록 보장해야하는 검색어에 대해 색인을 지정하는 것이 중요합니다.
인덱스는 .indexOn 규칙을 사용하여 지정됩니다. 다음은 공룡 목록의 높이 및 길이 필드를 색인화하는 색인 색인 선언의 예입니다.
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}
