그래서 실시간 DB에서 팬 아웃 쓰기를 할 때 보안 규칙에 newData().parent().parent()...parent()
을 통해 다양한 경로로 기록 될 새 데이터를 확인할 수있었습니다.보안 규칙에 대한 다른 컬렉션의 새 문서를 확인하는 방법은 무엇입니까?
const fanout = {
'users/user_a': {
username: 'foobar'
},
'usernames': {
'foobar': 'user_a'
}
};
firebase.update(fanout);
그리고이 같은 보안 뭔가 : 경우 FireStore의 보안 규칙에서이 작업을 수행 할 수있는 방법이 있는지
"rules": {
"users": {
$user_id: {
"username": {
".validate": "newData.parent().parent().parent().child('usernames').child(newData.val()).val() == auth.uid;
}
}
},
"usernames": {
"$username": {
".validate": "newData.parent().parent().child('users').child(auth.uid).child('username').val() == $username"
}
}
}
만약 궁금? 나는 exists()
기능을 보았지만 기존 문서에 대해서만 쓰여지려고하지는 않습니다.
사용자 및 사용자 이름을 저장하기 위해 별도의 2 건의 트랜잭션을 수행하면 데이터 품질 문제가 발생할 수 있습니다 (예 : 사용자가 갑자기 인터넷을 잃거나 앱을 닫을 때 두 번째 트랜잭션이 저장되지 않는 경우). 정확히 같은 이유로 내 글의 90 %가 일괄 처리됩니다. 이 문제를 해결하기 위해 필자는 이상적인 클라우드 기능을 사용하고 있습니다. 곧 Cloud Firestore의 기능 토지가되기를 바랍니다! 감사! – rmmmp
죄송합니다. 정말 설명이 잘못되었습니다. 나는 "usernames"콜렉션을 없애고 "users"를 직접 쿼리함으로써 팬 아웃을 피할 수 있었고 따라서 두 곳으로 쓰고 2 개의 트랜잭션을 사용할 필요가 없다고 말하고자했다. –
하지만 사용자마다 고유 한 사용자 이름을 사용하려면 어떻게해야합니까? 나는 우리가 사용자 이름을 바꿀 수 있기를 원하기 때문에 그것을 열쇠로 만들 계획이 없다. – rmmmp