Cloud Firestore 보안 규칙에 존재했던 writeFields를 기억하십니까?
그가 언제 사라졌는지 내가 대체 기능에 대해 얘기할게
MapDiff
.존재했던 리퀘스트.writeFields
Cloud Firestore의 보안 규칙에는 변수
request.writeFields
가 있었습니다.주로 작업 규칙
create
과 update
을 쓸 때 수정할 필드 대상을 참고할 수 있습니다.예를 들어, 다음 문서가 있습니다.
{
name: 'Taro',
age: 29,
country: 'Japan'
}
다음 데이터를 기록한 경우update
참조{
nickName: 'tarotaro',
age: 30
}
request.writeFields
는 다음 개체를 참조할 수 있습니다.{
nickName: 'tarotaro',
age: 30
}
resource.data
에서는 request.resource.data
에 기록된 미래의 문서 필드의 상태를 얻기 위해 request.writeFields
는'무엇을 쓰고 무엇을 업데이트하는가'의 차이를 얻는 데 매우 편리하다.하지만...
하지만 이는 2018년 10월께부터 디프리캣드로 바뀌었고, 공식 문서에서도 참고가 삭제됐다.
잠시 이렇게 사용했지만, (정확한 타이밍은 나도 모른다) 아마 2020년 3월께 리모브드에 의해 완전히 사라졌을 것이다.
근거Stack Overflow의 답변입니다.
Map.diff()
replaces writeFields
functionality 등장하는 맵디프 대신.
writeFields
가 사라지기 얼마 전 2020년 2월께 함수MapDiff
가 등장했다. 이 함수는 MapDiff
와 두 개의 맵형 변수에 따라 생성diff()
형이다.이 발표는 발매 노트에 라디오가 있고 Firebase 블로그에도 소개됐다.
MapDiff
에 따라 기존에 불가능했던 대상의 차점을 얻을 수 있다.map1.diff(map2) // type of `MapDiff`
MapDiff가 보유한 5가지 함수
MapDiff
는 다섯 개의 함수를 가지고 있다.addedKeys()
: 두 맵을 비교하고 추가 필드의 키 집합removedKeys()
: 두 맵을 비교하여 삭제된 필드의 키를 되돌려줍니다 changedKeys()
: 두 맵을 비교하고 수정된 필드 키affectedKeys()
: 두 맵을 비교하여 영향을 받은 필드 키를 되돌려줍니다.즉, addedKeys() + removedKeys() + updatedKeys()
쓰기 전후 차등
request.resource.data.diff(resource.data)
이렇게 하면 write 작업에서 쓰기 전후에 발생하는 diff 정보를 얻을 수 있다.이후 필요에 따라 어떤 차이가 생길지 이 키의 세트를 얻어 안전 규칙 구축에 도움이 된다.
request.resource.data.diff(resource.data).addedKeys()
request.resource.data.diff(resource.data).removedKeys()
request.resource.data.diff(resource.data).changedKeys()
request.resource.data.diff(resource.data).affectedKeys()
request.resource.data.diff(resource.data).unchangedKeys()
함수화
아래와 같이 함수화해서 사용하면 기술량도 줄어들어 쉽게 기술할 수 있다.
function dataDiff() {
return incomingData().diff(existingData());
}
function incomingData() {
return request.resource.data;
}
function existingData() {
return resource.data;
}
allow create: if dataDiff().unchangedKeys() == [...].toSet();
참고 자료
최후
만약 보도가 유용하다면!참고가 됐습니다!이런 상황에서 Like를 도와줄 수 있다면 정말 기쁠 것 같아요.🙌
향후 기술 소재의 투고가 될 동기.
지원 대기 중🐈
Reference
이 문제에 관하여(Cloud Firestore 보안 규칙에 존재했던 writeFields를 기억하십니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sgr_ksmt/articles/bcf56f511769c4b1ccf9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)