firebase - Firebase FireStore 复杂的安全规则
问题描述
有一个应用程序,其中我们有多个communities
用户,并且具有向其发送消息的角色write
。每个社区都有自己的用户({communityId}/meta_users/{uid}
)我已经编写了一个访问用户角色的函数,我试图浏览文档但无法提供任何帮助。我模拟我检查userRoleLevel
即使用户分配了角色('admin')也不允许阅读。请帮我纠正它。我已经粘贴了下面的规则片段。让我知道是否需要更多信息
function userRoleLevel(community){
return exists(/databases/$(database)/documents/communities/$(community)/meta_users/$(request.auth.uid)/roles/level)
&& get(/databases/$(database)/documents/communities/$(community)/meta_users/$(request.auth.uid)/roles/level).data.role;
}
service cloud.firestore {
match /databases/{database}/documents {
// All read is allowed for now.
match /{document=**} {
allow read;
}
match /communities/{community} {
allow write: if owner();
match /{category}/{message}{
allow write: if loggedIn()
&& (userRoleLevel(community) in ['owner', 'admin', 'writer']);
}
解决方案
您有userRoleLevel()
返回布尔值而不是包含角色的字符串的函数。userRoleLevel(community) in ['owner', 'admin', 'writer']
除非您执行以下操作,否则您将无法使用。
function userRoleLevel(community){
if( exists(/databases/$(database)/documents/communities/$(community)/meta_users/$(request.auth.uid)/roles/level) ) {
return get(/databases/$(database)/documents/communities/$(community)/meta_users/$(request.auth.uid)/roles/level).data.role;
} else {
return false; // return something that won't match your roles
}
}
推荐阅读
- dask - 从索引未排序的数据帧加载后的dask排序索引
- android - Flutter 医生不接受控制台中的 android 许可证
- python - 使用 CSV 文件的列时出现问题
- bash - 如何测试用于设置新机器的 bash 脚本
- python - Django Shell 默认数据库
- javascript - 设置函数说对象未定义,即使很难,它已在函数中定义并被返回
- datatables - 获取DataTable中隐藏列的值
- asp.net - 如何使用数据库中的信息并使用 .include() 显示 ViewBag?
- object-detection - 如何通过冻结一些层来迁移学习或微调 YOLOv4-darknet?
- python - 如何在python中解决收益率