次の方法で共有


Microsoft Purview Information Protection SDK でのアクセス チェック

コンプライアンス ポータルで定義されている情報権限管理権限の適用は、アプリケーション開発者の責任です。 SDK には、これらのアクセス チェックを簡略化するための API と列挙子のセットが用意されています。

以下の例と表は、アクセス チェックが必要なシナリオ、チェックする権限の一覧、およびチェックを実行する方法を示しています。

権限リストと結果

使用権限と説明の完全な一覧については、「 Microsoft Purview Information Protection の使用権限を構成する」を参照してください。 この記事では、特定の権限が存在する場合、または存在しない場合に、権限の適用と有効な関数におけるアプリケーション開発者の責任を定義します。

Important

アプリケーション開発者は、権限の 確認と適用 の両方を行う必要があります。 チェックを実行しないと、データが失われる可能性があります。

シナリオ

アプリケーションがアクセス チェックを実行する場所と方法は、ビルドするアプリケーションの種類によって異なります。 フル ファイル出力を処理し、ユーザー インターフェイスがないアプリケーションでは、 EXTRACT または OWNER 権限が最も頻繁に使用されます。 ユーザー インターフェイスを持つアプリケーションでは、最も細かい制御が必要になり、アプリケーション内のユーザー コントロールとエクスポート パスへのアクセスがブロックされます。 コード例については、 アクセス チェックの実行 に関するセクションを参照してください。

ユーザー インターフェイスのないアプリケーション

ユーザー インターフェイスのないアプリケーションは、多くの場合、サービス ベースまたはコマンドライン インターフェイス (CLI) です。 アプリケーションが Purview Information Protection によって保護されたファイルを処理している場合、適切な権限を持たないユーザーがサービスまたは CLI を使用して保護されていない形式でファイルをエクスポートできないようにする 必要があります

これらのアプリケーションでは、 OWNER または EXTRACT 権限が存在することを検証する必要があります。 OWNER を持つユーザーは、任意の操作を実行できます。 EXTRACT を使用しているユーザーは、保護を直接削除したり、新しい形式に保存したりできます。その形式が保護をサポートしていない場合でも、

ユーザー インターフェイスを持つアプリケーション

ユーザー インターフェイスを持つファイル SDK アプリケーションでは、ユーザーが実行できない操作へのアクセスを制限するコントロールを実装する必要があります。 このようなアプリケーションの 1 つの例として、Microsoft Purview Information Protection Viewer があります。 ビューアーは、ファイルを一時的に復号化し、アプリケーション ウィンドウにコンテンツをレンダリングします。 ドキュメントを表示する前に詳細なアクセス チェックを実行し、アクセス チェックの結果に基づいてユーザー インターフェイス要素を無効にします。

アクセス チェックを実行する一部のワークフローは、次のようになります。

  • ユーザーは OWNER 権限を持っていますか? "はい" の場合は、すべてのコントロールを有効にし、他の権限の処理を停止します。
  • ユーザーは PRINT 権限を持っていますか? [はい] の場合は、印刷コントロールを有効にします。 そうでない場合は、印刷コントロールを無効にします。
  • ユーザーは EXPORT 権限を持っていますか? "はい" の場合は、エクスポート コントロールと UI 要素を有効にします。 そうでない場合は、これらの要素を無効にします。
  • ユーザーは EXTRACT 権限を持っていますか? [はい] の場合は、コピーとスクリーンショットを有効にします。 そうでない場合は、これらの関数を無効にします。
  • ユーザーは 編集 権限を持っていますか? [はい] の場合は、現在のアイテムの編集と保存を有効にします。 そうでない場合は、アイテムを読み取り専用にします。

これらのチェックは、VIEW 権限を除き、権限リストと結果テーブル内のすべてのアクセス許可に対して実行する必要があります。 この権限がないと、ファイルにアクセスできません。

アクセス チェックの実行

アクセス チェックを実行するパターンは、C++、.NET、Java 用の File and Protection SDK で似ています。

これらのコード サンプルでは、SDK を初期化する手順を実行し、エンジンとハンドラーをインスタンス化していることを前提としています。

.NET を使用したファイル SDK でのアクセス チェックの実行

このコードの切り取りは、FileHandler が作成され、有効なファイルを指していることを前提としています。

// Validate that the file referred to by the FileHandler is protected.
if(handler.Protection != null)
{                
    // Validate that user has rights to remove protection from the file.                    
    if(handler.Protection.AccessCheck(Rights.Extract))
    {
        // If user has Extract right, remove protection and commit the change. Otherwise, throw exception. 
        handler.RemoveProtection();
        bool result = handler.CommitAsync(outputPath).GetAwaiter().GetResult();     
        return result;   
    }
    else
    {
        throw new Microsoft.InformationProtection.Exceptions.AccessDeniedException("User lacks EXPORT right.");
    }
}

.NET を使用した Protection SDK でのアクセス チェックの実行

このコード切り取りは、ProtectionHandler が使用のために作成されていることを前提としています。

// Validate that the file referred to by the FileHandler is protected.
if(protectionHandler != null)
{                
    // Validate that user has rights to remove protection from the file.                    
    if(protectionHandler.AccessCheck(Rights.Print))
    {
        // If the user has the print right, enable the control.
        // SetPrintControlEnabled() is an example and not a MIP SDK function.  
        SetPrintControlEnabled(true);
    }
    else
    {
        // If the user does not have the print right, disable the control.
        // SetPrintControlEnabled() is an example and not a MIP SDK function.  
        SetPrintControlEnabled(false);
    }
}

C++ を使用したファイル SDK でのアクセス チェックの実行

このコードの切り取りは、FileHandler が作成され、有効なファイルを指していることを前提としています。

// Validate that the file referred to by the FileHandler is protected.
if (fileHandler->GetProtection() != nullptr)
{
    if (fileHandler->GetProtection()->AccessCheck(mip::rights::Extract()))
    {
        auto commitPromise = std::make_shared<std::promise<bool>>();
        auto commitFuture = commitPromise->get_future();
        fileHandler->RemoveProtection();
        fileHandler->CommitAsync(outputFile, commitPromise);
        result = commitFuture.get();
    }
    else
    {
        throw std::runtime_error("User doesn't have EXTRACT right.");
    }
}

C++ を使用した Protection SDK でのアクセス チェックの実行

このコード切り取りは、ProtectionHandler が使用のために作成されていることを前提としています。

// Validate that the file referred to by the FileHandler is protected.
if (protectionHandler != nullptr)
{
    if (protectionHandler->AccessCheck(mip::rights::Print()))
    {
        // If the user has the print right, enable the control.
        // SetPrintControlEnabled() is an example and not a MIP SDK function.  
        SetPrintControlEnabled(true);
    }
    else
    {
        // If the user does not have the print right, disable the control.
        // SetPrintControlEnabled() is an example and not a MIP SDK function.  
        SetPrintControlEnabled(false);
    }
}

次のステップ

アクセス チェックを適切に実行し、それらのチェックに関連付けられている権限を適用する方法を理解したら、 ファイル ハンドラーの概念 に進み、ファイルからの保護の削除の詳細を確認してください。