【发布时间】:2019-02-15 03:33:22
【问题描述】:
所以我目前对所有用户都有两个角色:isAdmin 和 isReader。
允许管理员读取和写入数据,并且允许读取器读取数据。
当有人创建帐户时,他没有任何权利。甚至没有isReader。只有管理员可以更改规则。
这就是我计划的方式:
一旦有人创建了帐户,我就会在 Users 集合中创建一个文档,如下所示:
uid: user.uid,
email: user.email,
role: {
isAdmin: false,
isReader: false,
}
每次登录时,我都会更新“电子邮件”和uid,但保持role 不变。为了保护这种行为,我有这些规则:
match /Users/{userId} {
allow read: if isOwner(userId) || isAdmin();
allow create: if request.resource.data.hasAll(['uid', 'email', 'role']) && request.resource.data.role.isAdmin == false && request.resource.data.role.isReader == false;
allow update: if resource.data.role == null || isAdmin();
}
function isAdmin() {
return getUserData().role.isAdmin == true;
}
我认为我有 2 个错误:
由于某种原因,
data.hasAll(['uid', 'email', 'role'])不起作用。当我删除这部分时,create规则按计划工作。resource.data.role == null不起作用。我打算检查数据是否包含role的任何更新,因为我不能允许它不是来自管理员。但由于某种原因,它不起作用。
任何想法我做错了什么?还有我的策略是保存还是有人可以“破解”自己的读者或管理员权限?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security