我为用户ref设置了以下规则:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
function handleUserCreate() {
return(
request.auth.uid != null &&
request.auth.uid == userId &&
!("userRoles" in request.resource.data) &&
!("userLevel" in request.resource.data)
)
}
function handleUserUpdate() {
return(
request.auth.uid != null &&
request.auth.uid == userId &&
!("userRoles" in request.resource.data) &&
!("userLevel" in request.resource.data)
)
}
allow create: if handleUserCreate();
allow read: if request.auth.uid != null && request.auth.uid == userId;
allow update: if handleUserUpdate();
}
}
}
userRoles 和 userLevel 是我不希望用户完全更改的键。该应用程序会在用户登录时更新用户参考。
但是,如果用户引用中存在userRoles
和/或userLevel
键,则以下规则拒绝更新,即使来自应用程序的更新对象不包含任何键,更新也被拒绝。