규칙은 필터가 아닙니다: Firebase "권한이 없거나 부족함"오류 수정
이 블로그 게시물의 목적을 위해
flats
라는 1개의 기본 컬렉션이 있다고 가정하겠습니다. 여기에는 items
라는 하위 컬렉션이 포함되어 있습니다. .문서를 읽고 몇 가지 규칙을 테스트하고 컬렉션 구조를 업데이트한 후 다음 규칙을 찾았습니다.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /flats/{flatId} {
allow create: if request.auth != null;
allow read, update, delete: if request.auth != null
&& request.auth.uid in resource.data.idsOfUsersWithAccess;
match /items/{itemId} {
allow create: if request.auth != null;
allow read, update, delete: if request.auth != null
&& request.auth.uid in resource.data.idsOfFlatmatesThatShareThis;
}
}
}
}
위의 규칙은 기본적으로 인증된 사용자(
request.auth != null
)가 allow
에드 create
평면, 하지만 그들은 단지 allow
에드 read
, update
또는 delete
플랫의 고유 ID( request.auth.uid
)가 idsOfUsersWithAccess
라는 플랫 속성에 포함된 경우 플랫 .이제
items
컬렉션은 flats
의 하위 컬렉션입니다. 하나, 이전 규칙을 확장하는 중첩 규칙을 만들었습니다( rules for hierarchical data in the docs 에 대해 자세히 읽어보세요). 규칙에 따르면 인증된 사용자만 allow
에드 create
항목이지만 read
, update
또는 delete
항목 사용자의 고유 ID는 idsOfFlatmatesThatShareThis
아파트의 재산.그러나 어떤 이유로 내 앱에서 플랫 항목을 가져올 수 없었고 다음 오류가 발생했습니다.
Uncaught (in promise) FirebaseError: Missing or insufficient permissions.
내 코드와 Firebase 문서를 파헤친 후 문제를 발견했습니다. 플랫 항목을 가져오는 코드는 다음과 같습니다.
firestore.collection('flats').doc(flat.id)
.collection('items').get()
나의 단순한 두뇌(나는 그를 브라이언이라고 부르고 싶다)는 다음과 같은 생각을 하고 있었다.
If the authenticated user queries all flat items, the result will surely only include the ones they have access too, based on the security rules that I created.
잘못된.
documentation on writing conditions for Cloud Firestore Security Rules 분명히 말한다 :
Rules are not filters. You cannot write a query for all the documents in a collection and expect Cloud Firestore to return only the documents that the current client has permission to access.
이런!
문제는 내 규칙에 없었습니다. 내 쿼리에 있었다. 추가
where
규칙과 일치하는 절로 문제가 해결되었고 이제 의도된 항목을 로드할 수 있습니다.firestore.collection('flats').doc(flat.id)
.collection('items')
.where('idsOfFlatmatesThatShareThis', 'array-contains', state.user.id)
.get()
내가 무엇을 배웠습니까?
코딩에 뛰어들기 전에 문서를 읽는 데 더 많은 시간을 할애하십시오! 또는 적어도 모든 것을 빠르게 훑어보기 ;)
추신: YouTube에서 비디오 시리즈를 완전히 추천합니다.
Reference
이 문제에 관하여(규칙은 필터가 아닙니다: Firebase "권한이 없거나 부족함"오류 수정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nop33/rules-are-not-filters-fixing-firebase-missing-or-insufficient-permissions-error-56no텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)