javascript - Firestore 规则嵌套的“获取”函数
问题描述
我已经启动了一个 Cloud Firestore 数据库并设置了两个集合:
拥有文档数据对象的
用户{ userRole: string, userPermissions: Array<string> }
具有文档数据对象的
角色{ rolePermissions: Array<string> }
我添加了以下规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userID} {
//User Profiles
allow read: if isUserValid();
allow write: if isUserValid();
}
match /roles/{roleID} {
//User Roles
allow read: if true;
allow write: if isUserValid() && (hasUserPermission('ADMIN.ROLES') || hasRolePermission('ADMIN.ROLES'));
}
function isExist() {
return exists(/databases/$(database)/documents/users/$(request.auth.uid));
}
function isUserValid() {
return isExist() &&
(get(/databases/$(database)/documents/users/$(request.auth.uid)).data.userActive == true);
}
function hasUserPermission(permission) {
let queryPermissions = get(/databases/$(database)/documents/users/$(request.auth.uid)).data.userPermissions;
return permission in queryPermissions;
}
function hasRolePermission(permission) {
let queryRole = get(/databases/$(database)/documents/users/$(request.auth.uid)).data.userRole;
let queryPermissions = get(/databases/$(database)/documents/roles/$(queryRole)).data.rolePermissions;
return permission in queryPermissions;
}
}
}
当我测试规则时会发生什么:
- 功能“hasUserPermission(permission)”它工作正常
- 函数“hasRolePermission(permission)”返回错误:
Error: simulator.rules line [38], column [30]. Function not found error: Name: [get].; Error: Invalid argument provided to call. Function: [get], Argument: ["||invalid_argument||"]
为什么不起作用?
解决方案
推荐阅读
- javascript - 将 serialized() 复杂字符串转换为对象数组
- excel - 高级过滤器无法作为 worksheet_change 的一部分工作(by Val)
- uwp - 为什么我无法将 UWP 服务部署到我的 PC?
- python - csv .20 中的python 主要动作按部门咨询
- json - ASP.NET Core 中 GET 请求的 JSON 数据不完整
- sql-server - 无法在 SQL Server Reporting Services 报表生成器中格式化日期时间
- assembly - MIPS汇编中2个二进制数之间的位差
- php - 如何修复inlcude_once在dreamweaver中将php显示为仅输出错误?
- bash - 如何将文件中的部分行转换为大写
- javascript - flatpickr:将第二个日期选择器的日期设置为第一个日期选择器的相同日期