2

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

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

CommunicationError {消息:“权限修改无效。”,名称:“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()
            })
          })
        })
  }
4

1 回答 1

1

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

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

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

如果您更喜欢捕获异常并显示错误消息,您可以这样做:

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

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

关于您上面的代码,您可以使用deleteReadAccess(id)代替denyReadAccess(id)(对于写访问权限相同)。随着denyReadAccess(id)您正在创建一个额外的拒绝规则,因此您最终会获得 UserX 的允许规则和 UserX 的拒绝规则,因此最好通过删除允许规则来撤销访问。(有关允许和拒绝规则的解释,请参见此答案

于 2017-10-05T21:33:46.997 回答