2017-10-05 9 views
2

複数のユーザーがオブジェクトのデータを編集できるアプリケーションがあります。ユーザーA、B、Cというだけで、読み取りと書き込みの両方がオブジェクトACLに明示的に定義されています。自分のユーザーのACLパーミッションを削除する

私は、ユーザAとしてログインしていたとき、私は、ユーザBとCのためのアクセスを削除することができます...しかし、私は自分自身を削除しようとすると、エラーがスローされます。

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

ユーザーがこの操作を元に戻すことができなかったため、ユーザー自身のアクセスを取り消すことはできません。

あなたが本当にことをしたい場合は、この回避する方法があり、言った:あなたが読んでnode役割への書き込みアクセス権を与える必要があり

  1. が。この方法では、オブジェクトはバックエンドコードから常にアクセスできます。
  2. 現在ログインしているユーザー(db.User.me)のアクセスを取り消すバックエンドコードを作成します。

あなたは例外とをキャッチすることを好む場合は、このようにそれを行うことができますエラーメッセージが表示さ:

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

私はこれがあなたの質問に答える願っています。

上記のコードに関しては、denyReadAccess(id)の代わりにdeleteReadAccess(id)(書き込みアクセスの場合も同じ)を使用できます。 denyReadAccess(id)を使用すると、追加の拒否ルールが作成されるため、UserXの許可ルールとUserXの拒否ルールになります。したがって、許可ルールを削除してアクセスを取り消すほうがよいでしょう。 (許可ルールと拒否ルールの説明については、this answerを参照してください)

関連する問題