共用方式為


Microsoft Purview 資訊保護 SDK 中的存取檢查

強制執行 合規性入口網站中定義 的資訊版權管理許可權,是應用程式開發人員的責任。 SDK 提供一組 API 和列舉值,以簡化這些存取檢查。

下列範例和表格將示範哪些案例需要存取檢查、要檢查的許可權清單,以及如何執行檢查。

許可權清單和成果

如需許可權和描述的完整清單,請參閱 設定 Azure 資訊保護的使用權。 本文定義應用程式開發人員在許可權強制執行中的責任,並在特定許可權存在或不存在時啟用函式。

這很重要

應用程式開發人員有責任檢查並執行權利。 執行檢查失敗可能會導致資料遺失。

情境

應用程式執行存取檢查的位置和方式取決於您要建置的應用程式類型。 處理完整檔案輸出且沒有使用者介面的應用程式會最常使用 EXTRACTOWNER 許可權。 具有使用者介面的應用程式需要最詳細的控制,並封鎖使用者控制和應用程式內導出路徑的存取。 如需程式代碼範例,請參閱 執行存取檢查 一節。

沒有使用者介面的應用程式

沒有使用者介面的應用程式通常是以服務為基礎的或命令行介面(CLI)。 當您的應用程式正在處理 Purview 資訊保護所保護的檔案時, 它必須確保 沒有正確許可權的使用者無法使用服務或 CLI,以未受保護的格式匯出檔案。

這些應用程式應該驗證 擁有者EXTRACT 許可權是否存在。 擁有 OWNER 的使用者可以執行任何作業。 具有 EXTRACT 的使用者可以直接移除保護或儲存到新的格式,即使該格式不支援保護也一樣。

具有使用者介面的應用程式

具有使用者介面的檔案 SDK 應用程式必須實作控件,限制使用者無法執行的作業。 這類應用程式的其中一個範例是 Azure 資訊保護查看器。 查看器會暫時解密檔案,並在應用程式視窗中轉譯內容。 它會在顯示檔之前執行細微的存取檢查,並根據存取檢查的結果停用使用者介面元素。

執行存取檢查的部分工作流程可能如下所示:

  • 使用者是否擁有 所有者 權限? 如果是,請啟用所有控制件並停止處理其他許可權。
  • 使用者是否具有 PRINT 許可權? 如果是,請啟用列印控件。 如果沒有,請停用列印控件。
  • 使用者是否有 EXPORT 許可權? 如果是,請啟用匯出控件和UI元素。 如果沒有,請停用這些元素。
  • 使用者是否具有 EXTRACT 許可權? 如果是,請啟用複製和螢幕快照。 如果沒有,請停用這些功能。
  • 使用者是否有 編輯 許可權? 如果是,請啟用編輯並儲存目前的專案。 如果沒有,請將項目設為唯讀。

這些檢查應該針對 許可權清單和結果 數據表中的所有許可權執行,但 VIEW 許可權除外。 若沒有此許可權,就無法存取檔案。

執行存取檢查

執行存取檢查的模式與適用於 C++、.NET 和 Java 的檔案和保護 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 在保護 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++ 在保護 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);
    }
}

後續步驟

既然您已瞭解如何正確執行存取檢查,以及強制執行與這些檢查相關聯的許可權,請繼續進行 檔案處理程式概念 ,以深入瞭解如何從檔案移除保護。