删除我自己的用户ACL权限

时间:2017-10-05 20:50:49

标签: baqend

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

1 个答案:

答案 0 :(得分:1)

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

那就是说,如果你真的想要的话,有一种方法来解决这个问题

  1. 您需要授予node角色的读写权限。这样,始终可以从后端代码访问该对象。
  2. 您编写了一个后端代码,用于撤消当前登录用户(db.User.me)的访问权限。
  3. 如果您希望捕获异常并显示错误消息,您可以这样做:

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

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

    关于上面的代码,您可以使用deleteReadAccess(id)代替denyReadAccess(id)(写入权限相同)。使用denyReadAccess(id)您正在创建其他拒绝规则,因此您最终会获得UserX的允许规则和UserX的拒绝规则,因此最好通过删除允许规则来撤消访问权限。 (有关允许和拒绝规则的说明,请参阅this answer

相关问题