删除我自己的用户 ACL 权限

Removing my own users ACL permisions

我有一个允许多个用户编辑对象数据的应用程序,假设用户 A、B 和 C。所有对象都在对象 ACL 上明确定义了读和写。

当我以用户 A 身份登录时,我可以删除用户 B 和 C 的访问权限...但是当我尝试删除自己时会引发错误:

通信错误{消息:"The permission modification is not valid.",名称:"CommunicationError",原因:{...},原因:"Invalid Permission Modification",状态:462,...}

有没有办法允许用户删除他自己的 ACL?如果没有,给定此代码,我如何捕获此错误并执行 alert("You can't remove your own access to this company, please have an associate remove you or contact our support team.") ?

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 的拒绝规则,因此最好通过删除允许规则来撤销访问权限。 (有关允许和拒绝规则的解释,请参阅