対応方法 - アクセスコントロール問題

アクセスコントロールの対応方法について説明するには、本サービスが提供する "DataObject" "AddressGroup" の2つのコントラクトの概念を把握する必要があります。

  • AddressGroup

    AddressGroup は、名前の通りアドレスを纏めたグループです。

    ある特定のアドレスの集団を管理します。

    AddressGroup同士でツリー構造が作れる仕様になっています。

  • DataObject

    DataObject は、アクセスコントロールが必要なデータに対して、一対一でインスタンス化 (実態はstructureが生成) されるオブジェクトです。

    実際のデータの内容はフィールドに記録せずに、データ内容のハッシュ値を記録します。

  • 概念イメージ

    概念的なイメージは下記のようになります。。

    アクセスコントロール概念イメージ

    実態としては、DataObjectに対する読み書きの制限は、readerId、writerIdで管理していて、このIDはAddressGroup コントラクトのキーになっています。

    DataObjectコントラクトも AddressGroupコントラクトも共にGMOがプロバイダーとなっているCNSで管理されていて、次のようなクラス構成となります。

  • 詳細イメージ

    詳細イメージ

書込み制御

書込みのフローは次のシーケンスとなります。(全体イメージを掴むために様々な省略を行っています。)

  • 書込みシーケンス

    書込みイメージ

    空色の箇所は、本サービスのフレームワークが提供するもので、各サービスプロバイダでの実装は必要はありません。

    サービスプロバイダが、実装をする必要のある箇所は次になります。

    • クライアントAPIの呼び出し

      AltExecCnsAPI#sendData をAPIの指定の通りに呼び出します。

    • Ethereum Contractの実装

      APIサーバは適切なチェックを行った後、指定されたCNSからContractと関数、パラメータで、サービスプロバイダが用意したContractを呼び出します [1.2]。

      サービスプロバイダはこの呼出の際に、コントラクト内のロジックでDataObjectの生成を行い、Hash値の設定をします[1.2.3]。

    本サービスのAPIは、サービスプロバイダのコントラクト呼出が正常に完了した際に、アップロードしたデータを記録し[1.3]、再度指定のオブジェクトに対するHash値の確定処理を行います。

    この二重の確定処理は、次の意味があります。

    • 本サービスがデータストアにデータを入れないままに、サービスプロバイダが一方的にHashの設定できないこと。
    • 本サービス側が一方的にHash値を設定できないこと。

読込み制御

読込みのフローは次のシーケンスとなります。(全体イメージを掴むために様々な省略を行っています。)

  • 読込シーケンス

    読込イメージ

    空色の箇所は、本サービスのフレームワークが提供するもので、各サービスプロバイダでの実装は必要はありません。

    サービスプロバイダが、実装をする必要のある箇所は次になります。

    • クライアントAPIの呼び出し

      AltExecCnsAPI#getData をAPIの指定の通りに呼び出します。

    • Ethereum Contractの実装

      APIサーバは適切なチェックを行った後、指定されたCNSからContractと関数、パラメータで、サービスプロバイダが用意したContractを呼び出します [1.2]。

      サービスプロバイダはこの呼出の際に、データの読込みを行うobjetcId(s)を返却するようにコントラクトを実装しておきます。

    本サービスのAPIサーバは、返却されたobjectIdに対して、リクエストしてきたユーザにアクセス権限があるかをContract上で確認します[1.4]。

    読込み権限があればデータストアからデータを取得し、権限がなければエラーを返却します。

results matching ""

    No results matching ""