我有一个issue
文档,我想应用以下限制来更新它-
1.用户必须登录
1.用户可以是该问题的创建者,也可以是主持人
1.要更新status
字段,用户必须是主持人
我可以执行前两条规则-
allow update: if (isLoggedIn() && (isCreator() || isModerator()));
但是我很难把第三条规则的逻辑和这个结合起来。
在前端,我可以根据当前用户是否是版主来显示/隐藏status
字段。但是我如何在后端通过安全规则来强制执行这个限制呢?
我的规则是-
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isLoggedIn(){
return request.auth != null;
}
function isCreator(rsc){
return request.auth.uid == rsc.data.postedById;
}
function isModerator(){
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.moderator == true;
}
function isStatusField(rcs){
return request.resource.data.diff(rcs.data).affectedKeys().hasAny(['status']);
}
match /issues/{issue} {
allow read;
allow create: if isLoggedIn();
allow update: if (isLoggedIn() && (isCreator() || isModerator()));
}
}
}
1条答案
按热度按时间zkure5ic1#
我建议制定稍微不同的规则:
1.文档的主持人可以修改其中的任何字段。
1.单据的创建者可以修改除
status
以外的所有字段。这就更清楚地表明,您需要在您的条件中更早地划分用户的角色,并可能导致类似以下的结果: