我有以下收藏
/用户
在用户文档中,我有一个companyuid来引用其公司成员身份,还有一个名为permissions的对象,它有两个属性:
{
admin : true|false
superAdmin: true | false
}
我的应用程序逻辑如下:
-
-
管理员只能向具有相同公司UID的其他用户授予管理员访问权限
-
非管理员不能授予任何管理权限
-
管理员不应删除自己的管理权限。
我关心的是,如果我将权限存储在用户文档中,那么如何有效地防止非管理员写入其权限对象,同时允许他们编辑用户文档中的字段?
match /users/{userUuid} {
allow read: if request.auth != null && belongsToSameCompany()
function areAdminPermissionsIntact(){
return request.resource.permissions.admin == resource.permissions.admin
}
function areSuperAdminPermissionsIntact(){
return request.resource.permissions.superAdmin == resource.permissions.superAdmin
}
function isNotTheSameUser(){
return resource.data.uuid != request.auth.uid
}
function belongsToSameCompany(){
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.companyUuid == resource.data.companyUuid
}
allow write: if request.auth != null
&&
(areAdminPermissionsIntact() || areAdminPermissionsIntact() == false && resource.data.permissions.admin == true && isNotTheSameUser() && belongsToSameCompany())
&&
(areSuperAdminPermissionsIntact() || areSuperAdminPermissionsIntact() == false && resource.data.permissions.superAdmin == true && isNotTheSameUser() && belongsToSameCompany())
}