删除我自己的用户 ACL 权限



我有一个应用程序,允许多个用户编辑一个对象的数据,让我们说用户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()
            })
          })
        })
  }
无法

撤销用户自己的访问权限是设计使然,因为用户之后无法撤消此操作。

也就是说,如果你真的想要,有一种方法可以解决这个问题

  1. 您需要授予对node角色的读取和写入访问权限。这样,始终可以从后端代码访问对象。
  2. 您编写一个后端代码,用于撤销当前登录用户 ( db.User.me ) 的访问权限。

如果您希望捕获异常并显示错误消息,则可以这样做:

.catch(e => {
  if (e.status == 462) {
    // show message
  }
})

我希望这能回答你的问题。

关于上面的代码,您可以使用deleteReadAccess(id)而不是denyReadAccess(id)(写入访问也是如此)。使用 denyReadAccess(id) 您将创建一个额外的拒绝规则,因此您最终会得到一个针对 UserX 的允许规则和一个针对 UserX 的拒绝规则,因此最好通过删除允许规则来撤销访问权限。(有关允许和拒绝规则的说明,请参阅此答案)

最新更新