在 Firestore 安全规则中列出类型安全
list type safety in firestore security rules
在我的 Firestore 安全规则中,我想要一个规则来检查列表中的所有元素是否都是字符串类型。
我的 "user" 文档有一个名为 "friends" 的字段。它是一个字符串列表,表示其他用户文档的文档 ID。
这些是我当前的规则:
function userIsAuthenticated() {
return request.auth != null;
}
match /users/{userID} {
function resourceIsValidUser() {
return displayNameIsValid();
}
function displayNameIsValid() {
return request.resource.data.displayName is string &&
request.resource.data.displayName.size() > 0 &&
request.resource.data.displayName.size() < 17;
}
function photoUrlIsValid() {
return request.resource.data.photoUrl is string;
}
function friendsIsValid() {
return request.resource.data.friends is list;
}
function userIsUserOwner() {
return request.auth.uid == userID;
}
allow read: if userIsAuthenticated();
allow write: if
userIsAuthenticated() &&
resourceIsValidUser() &&
userIsUserOwner();
}
有什么我可以添加到 friendsIsValid()
函数以确保好友列表只包含字符串值的吗?
目前没有检查数组所有元素类型的函数。由于也没有办法迭代一个数组,你现在唯一能做的就是预测数组的大小并单独检查每个元素,例如 array[0] is string && array[1] is string
等等。
Firebase 团队意识到某些规则可能需要执行此操作。如果您 file a feature request 有 Firebase 支持,这将有助于升级问题。
在我的 Firestore 安全规则中,我想要一个规则来检查列表中的所有元素是否都是字符串类型。
我的 "user" 文档有一个名为 "friends" 的字段。它是一个字符串列表,表示其他用户文档的文档 ID。 这些是我当前的规则:
function userIsAuthenticated() {
return request.auth != null;
}
match /users/{userID} {
function resourceIsValidUser() {
return displayNameIsValid();
}
function displayNameIsValid() {
return request.resource.data.displayName is string &&
request.resource.data.displayName.size() > 0 &&
request.resource.data.displayName.size() < 17;
}
function photoUrlIsValid() {
return request.resource.data.photoUrl is string;
}
function friendsIsValid() {
return request.resource.data.friends is list;
}
function userIsUserOwner() {
return request.auth.uid == userID;
}
allow read: if userIsAuthenticated();
allow write: if
userIsAuthenticated() &&
resourceIsValidUser() &&
userIsUserOwner();
}
有什么我可以添加到 friendsIsValid()
函数以确保好友列表只包含字符串值的吗?
目前没有检查数组所有元素类型的函数。由于也没有办法迭代一个数组,你现在唯一能做的就是预测数组的大小并单独检查每个元素,例如 array[0] is string && array[1] is string
等等。
Firebase 团队意识到某些规则可能需要执行此操作。如果您 file a feature request 有 Firebase 支持,这将有助于升级问题。