我有一个应用程序,允许多个用户编辑一个对象的数据,让我们说用户A,B和C。 所有这些都在对象 ACL 上显式定义了读取和写入。
当我以用户 A 身份登录时,我可以删除用户 B 和 C 的访问权限......但是当我尝试删除自己时,它会抛出错误:
通信错误 {消息:"权限修改无效。",名称:"通信错误",原因:{...},原因:"权限修改无效",状态: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()
})
})
})
}
撤销用户自己的访问权限是设计使然,因为用户之后无法撤消此操作。
也就是说,如果你真的想要,有一种方法可以解决这个问题:
- 您需要授予对
node
角色的读取和写入访问权限。这样,始终可以从后端代码访问对象。 - 您编写一个后端代码,用于撤销当前登录用户 (
db.User.me
) 的访问权限。
如果您希望捕获异常并显示错误消息,则可以这样做:
.catch(e => {
if (e.status == 462) {
// show message
}
})
我希望这能回答你的问题。
关于上面的代码,您可以使用deleteReadAccess(id)
而不是denyReadAccess(id)
(写入访问也是如此)。使用 denyReadAccess(id)
您将创建一个额外的拒绝规则,因此您最终会得到一个针对 UserX 的允许规则和一个针对 UserX 的拒绝规则,因此最好通过删除允许规则来撤销访问权限。(有关允许和拒绝规则的说明,请参阅此答案)