我有一个应用程序,允许多个用户编辑对象的数据,我们只说用户A,B和C.所有读取和写入都在对象ACL上明确定义。
当我以用户A身份登录时,我可以删除用户B和C的访问权限...但是当我尝试删除自己时,它会抛出错误:
CommunicationError {message:“权限修改无效。”,名称:“CommunicationError”,原因:{...},原因:“无效的权限修改”,状态:462,...}
有没有办法允许用户删除自己的ACL?如果没有,根据此代码,如何捕获此错误并发出警告(“您无法删除自己对该公司的访问权限,请让相关人员删除您或联系我们的支持团队。”)
removeManager(event, id) {
event.preventDefault();
db.Companies.load(this.props.match.params.id)
.then((company) => {
company.acl.denyReadAccess(id);
company.acl.denyWriteAccess(id);
return company.update()
.then(() => {
return company.partialUpdate()
.remove("managers", id)
.execute()
.then(() => {
this.getCompanyandManagers()
})
})
})
}
答案 0 :(得分:1)
无法撤销用户自己的访问权限是设计使然,因为之后用户无法撤消此操作。
那就是说,如果你真的想要的话,有一种方法来解决这个问题:
node
角色的读写权限。这样,始终可以从后端代码访问该对象。db.User.me
)的访问权限。如果您希望捕获异常并显示错误消息,您可以这样做:
.catch(e => {
if (e.status == 462) {
// show message
}
})
我希望这能回答你的问题。
关于上面的代码,您可以使用deleteReadAccess(id)
代替denyReadAccess(id)
(写入权限相同)。使用denyReadAccess(id)
您正在创建其他拒绝规则,因此您最终会获得UserX的允许规则和UserX的拒绝规则,因此最好通过删除允许规则来撤消访问权限。 (有关允许和拒绝规则的说明,请参阅this answer)