2017-10-05 80 views
2

我有一個應用程序,允許多個用戶編輯對象的數據,讓我們只說用戶A,B和C.所有在對象ACL上明確定義的讀取和寫入。刪除我自己的用戶ACL權限

當我登錄的用戶A,我可以刪除用戶B和C接入......但是當我嘗試刪除自己它拋出一個錯誤:

CommunicationError {消息:「權限修改無效的權限修改「,狀態:462,...}

有沒有一種方法可以讓用戶刪除自己的ACL?」,名稱:「CommunicationError」,原因:{...},原因:「無效的權限修改」如果沒有,給出這個代碼,我該如何發現這個錯誤並做出提示(「你不能刪除你自己對這家公司的訪問權限,請讓你的同事刪除你或聯繫我們的支持團隊。」)?

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

不能撤銷用戶自己的訪問權限是設計的,因爲用戶以後無法撤消此操作。

這就是說,有得到這個圍繞方式,如果你真的想要的是:

  1. 你需要給讀寫訪問node作用。這樣可以始終從後端代碼訪問對象。
  2. 您編寫撤消當前登錄用戶(db.User.me)的訪問的後端代碼。

如果你喜歡捕獲異常並顯示錯誤消息你可以做這樣的:

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

我希望這回答了你的問題。

關於上面的代碼,您可以使用deleteReadAccess(id)而不是denyReadAccess(id)(寫權限相同)。使用denyReadAccess(id)您正在創建額外的拒絕規則,因此您最終得到UserX的允許規則和UserX的拒絕規則,因此最好通過刪除允許規則來撤銷訪問。 (有關允許和拒絕規則的解釋,請參閱this answer