【发布时间】:2019-07-16 08:31:35
【问题描述】:
在我的项目中,我有用户和类的 firestore 集合。每个用户可以是一个或多个类的一部分。 Classes 文档具有属性成员,它是一个数组,包括该类中的所有用户 uid。
例如:
users documents:
doc.id: USER1UID
{ name: 'user1', email: 'user1@user1.com', phone: '+123 456 789 001' }
doc.id: USER2UID
{ name: 'user2', email: 'user2@user2.com', phone: '+123 456 789 002' }
doc.id: USER3UID
{ name: 'user3', email: 'user3@user3.com', phone: '+123 654 789 003' }
classes documents:
doc.id: ABCDEF
{ name="class1", members: ['USER1UID', 'USER2UID'] }
doc.id: GHIJKL
{ name="class2", members: ['USER1UID', 'USER3UID'] }
doc.id: MNOPQR
{ name="class3", members: ['USER3UID'] }
我需要编写一个规则,该规则仅允许用户阅读有关另一个用户的详细信息,前提是他们在同一个班级。每个用户还可以阅读自己的个人资料。
在这种情况下,user1 可以读取 user2 和 user3 的详细信息。 (他们在 class1 和 class2 中)。 User2 只能读取 user1 的详细信息(它们在 class1 中)。 User3 只能读取 user1 的详细信息(他们在 class2 中)。
我需要类似的东西:
match /users/{userId} {
allow read:
//user is logged in
if request.auth != null
&& (
//user can read own profile
request.auth.id == $(userId)
//there is a class where are both (requesting and requested) users
|| exists( (/databases/$(database)/documents/classes/).where(request.auth.id in members).where($(userId) in members)
)
}
【问题讨论】:
标签: google-cloud-firestore firebase-security