【发布时间】:2020-12-28 01:19:59
【问题描述】:
我有一些帖子的集合,其中的对象包含一个数组名称“groupIds”,其中包含帖子链接到的所有 ID。
我执行此查询,其中 ids 是用户所属的所有 groupId 的数组。
firebase
.collectionGroup('posts')
.where('groupIds', arrayContainsAny: [CS5GQ487VRChV9Z0N50P, 3wsvOvGZ6UOA7r5N5qjj, 3ZdEykm19nd2yMYe1FFB, pleFNwQ98ggdfyqWmAXn, 97PiIGlvoDMecJzxC38b, MaY7oJGHz2zIZ7PSLEfc])
.orderBy('created', descending: true)
.limit(20);
我正在使用这些规则。 (没有帖子的 groupId 超过 10 个)
function hasGroupReadPermissionsMultiple(groupIds){
return (groupIds[0] != null && groupIds[0] in request.auth.token) ||
(groupIds[1] != null && groupIds[1] in request.auth.token) ||
(groupIds[2] != null && groupIds[2] in request.auth.token) ||
(groupIds[3] != null && groupIds[3] in request.auth.token) ||
(groupIds[4] != null && groupIds[4] in request.auth.token) ||
(groupIds[5] != null && groupIds[5] in request.auth.token) ||
(groupIds[6] != null && groupIds[6] in request.auth.token) ||
(groupIds[7] != null && groupIds[7] in request.auth.token) ||
(groupIds[8] != null && groupIds[8] in request.auth.token) ||
(groupIds[9] != null && groupIds[9] in request.auth.token);
}
match /{somePath=**}/posts/{postId}{
allow read: if hasGroupReadPermissionsMultiple(resource.data.groupIds);
}
用户的自定义声明将 id 作为键,将角色作为值,直接在声明对象中,如下所示:
{CS5GQ487VRChV9Z0N50P: a, MaY7oJGHz2zIZ7PSLEfc: a, auth_time: 1599646120, 3wsvOvGZ6UOA7r5N5qjj: a, cR2j2ed4LbsCZYMib7yt: a, sub: hfn2VSqEJUMVBQLmyPa2jFhNA1Q2, user_id: hfn2VSqEJUMVBQLmyPa2jFhNA1Q2, iat: 1599719905, iss: https://securetoken.google.com/XXX, aud: XXX, het-persijntje: a, name: Jan Jansen, pleFNwQ98ggdfyqWmAXn: a, exp: 1599723505, 3ZdEykm19nd2yMYe1FFB: a, JLTmBMxPerm8BY75KEBX: a, 97PiIGlvoDMecJzxC38b: a, email_verified: true, email: XXX@XXX.XX, firebase: {identities: {email: [XXX@XXX.XX]}, sign_in_provider: password}, het-persijntje-test-excel: a}
我希望用户仅在他们所属的任何组链接到帖子时才能访问帖子。有人看到我的错误吗?有没有更有效的方法来实现这一点?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security