防止根据 firebase 中的用户类型写入文档?
prevent writings to document depending on user type in firebase?
我在这个集合中有一个名为 shared 的集合我将有一个文档作为管理员和客户之间的连接(这样客户可以推送他们的在线状态,管理员也是如此),我想要做的是一个安全规则,只允许管理员修改他的文件
(在线管理员:正确)
和客户仅修改他们的文档(onlineClients:{clientID:true})。
这可以使用规则来完成吗?如果是这样,如何限制对每种用户类型的写入以及在这种情况下取决于什么?
Doc Model
是的,这完全有可能,并且在 role based access control 上的 Firebase 文档中涵盖得很好。当您在 Firestore 文档中定义角色时,这些示例规则来自于这些示例规则:
service cloud.firestore {
match /databases/{database}/documents {
// For attribute-based access control, Check a boolean `admin` attribute
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
allow read: true;
// Alterntatively, for role-based access, assign specific roles to users
match /some_collection/{document} {
allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"
}
}
}
以及在自定义属性中定义角色时的这些规则:
service cloud.firestore {
match /databases/{database}/documents {
// For attribute-based access control, check for an admin claim
allow write: if request.auth.token.admin == true;
allow read: true;
// Alterntatively, for role-based access, assign specific roles to users
match /some_collection/{document} {
allow read: if request.auth.token.reader == "true";
allow write: if request.auth.token.writer == "true";
}
}
}
我还建议您观看 Firebase 专家关于该主题的视频:Implementing Authorization Models
我在这个集合中有一个名为 shared 的集合我将有一个文档作为管理员和客户之间的连接(这样客户可以推送他们的在线状态,管理员也是如此),我想要做的是一个安全规则,只允许管理员修改他的文件 (在线管理员:正确)
和客户仅修改他们的文档(onlineClients:{clientID:true})。 这可以使用规则来完成吗?如果是这样,如何限制对每种用户类型的写入以及在这种情况下取决于什么?
Doc Model
是的,这完全有可能,并且在 role based access control 上的 Firebase 文档中涵盖得很好。当您在 Firestore 文档中定义角色时,这些示例规则来自于这些示例规则:
service cloud.firestore {
match /databases/{database}/documents {
// For attribute-based access control, Check a boolean `admin` attribute
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
allow read: true;
// Alterntatively, for role-based access, assign specific roles to users
match /some_collection/{document} {
allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"
}
}
}
以及在自定义属性中定义角色时的这些规则:
service cloud.firestore {
match /databases/{database}/documents {
// For attribute-based access control, check for an admin claim
allow write: if request.auth.token.admin == true;
allow read: true;
// Alterntatively, for role-based access, assign specific roles to users
match /some_collection/{document} {
allow read: if request.auth.token.reader == "true";
allow write: if request.auth.token.writer == "true";
}
}
}
我还建议您观看 Firebase 专家关于该主题的视频:Implementing Authorization Models