【发布时间】:2018-06-28 02:33:38
【问题描述】:
似乎无法使用 Firestore 安全规则 .hasAny()。此方法是否已弃用或不再可用?
我正在使用它
/// Functions - NOT WORKING!!! ///
function isTeamMember(teamId, userId) {
return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId].hasAny(['OWNER', 'ADMIN', 'STANDARD'])
}
Firestore 数据的结构是这样的
- team_access_privilege (COLLECTION)
-- teamId (DOCUMENT)
--- userId1 (KEY) : 'OWNER' (VALUE)
--- userId2 (KEY) : 'ADMIN' (VALUE)
--- userId3 (KEY) : 'ADMIN' (VALUE)
--- userId4 (KEY) : 'STANDARD' (VALUE)
这个团队有 4 个用户。
我还测试了以下功能,它们运行良好。
/// Functions - Working Well ///
function isOwnerOfTeam(teamId, userId) {
return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'OWNER'
}
我的目标是检查只要 userId 存在于 team_access_privilege 他/她就可以访问数据。我尝试使用 exists() 但模拟器需要永远运行。我正在放弃使用 exists()。我不确定这是否是一个已知问题。
这需要永远运行
/// Functions - Not working too ///
function isTeamMember(teamId, userId) {
return exists(get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId])
}
总而言之,我的目标是检查用户是否是团队的“所有者”、“管理员”或“标准”来读取/写入数据。
编辑 1
尝试了@Doug Stevenson 的回答,但它不起作用
['OWNER', 'ADMIN', 'STANDARD'].hasAny([get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId]])
我尝试了另一种方法,它奏效了。
/// Functions - Working Well ///
function isOwnerOfTeam(teamId, userId) {
return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'OWNER'
}
/// Functions - Working Well ///
function isAdminOfTeam(teamId, userId) {
return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'ADMIN'
}
/// Functions - Working Well ///
function isStandardOfTeam(teamId, userId) {
return get(/databases/$(database)/documents/team_access_privilege/$(teamId)).data[userId] == 'STANDARD'
}
/// Functions - Then This WOrks ///
function isTeamMember(teamId, userId) {
return isOwnerOfTeam(teamId, userId) || isAdminOfTeam(teamId, userId) || isStandardOfTeam(teamId, userId)
}
['', '', ''].hasAny( get() ) 不起作用。 get().hasAny(['', '', '']) 也是如此。 Exists 不适用于我所说的数据结构。
这只是令人费解。无论如何,我现在有一个有效的安全规则。希望@Doug Stevenson 可以帮助找出一种更有效的方法来检查用户是否是团队的“所有者”、“管理员”或“标准”来读取/写入数据。
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security