Microsoft Information Protection SDK – Policy SDK-motorbegrepp

mip::PolicyEngine implementerar alla åtgärder som kan utföras av policys-SDK, med undantag för inläsning av profilen.

Implementera: Lägg till en principmotor

Implementering: Skapa principmotorinställningar

Precis som en profil kräver motorn också ett inställningsobjekt, mip::PolicyEngine::Settings. Det här objektet lagrar den unika motoridentifieraren, ett objekt i implementeringen mip::AuthDelegate , anpassningsbara klientdata för felsökning eller telemetri samt, om du vill, språkvarianten.

I följande exempel skapas ett PolicyEngine::Settings objekt som kallas engineSettings med hjälp av programanvändarens identitet:

PolicyEngine::Settings engineSettings(
  mip::Identity(mUsername), // mip::Identity.  
  authDelegateImpl,         // Auth delegate object
  "",                       // Client data. Customizable by developer, stored with engine.
  "en-US",                  // Locale.
  false);                   // Load sensitive information types for driving classification.

När du skapar engineSettings på det här sättet anger du också uttryckligen ett unikt engineId:

engineSettings.SetEngineId(engineId);

Med användarnamnet eller e-postmeddelandet ser du till att samma motor läses in varje gång användaren använder tjänsten eller programmet.

Giltigt är också att tillhandahålla ett anpassat motor-ID:

PolicyEngine::Settings engineSettings(
  "myEngineId",     // String
  authDelegateImpl, // Auth delegate object
  "",               // Client data in string format. Customizable by developer, stored with engine.
  "en-US",          // Locale. Default is en-US
  false);           // Load sensitive information types for driving classification. Default is false.

Vi rekommenderar att du använder en första parameter, ID, som ansluter motorn till den associerade användaren, helst användarens huvudnamn.

Implementering: Lägg till policymotorn

För att lägga till motorn, återgå till Future/Promise-mönstret som användes för att läsa in profilen. I stället för att skapa löftet för mip::Profileanvänder du mip::PolicyEngine.


  // Auto profile will be std::shared_ptr<mip::Profile>.
  auto profile = profileFuture.get();

  // Create the delegate
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);


  // Create the PolicyEngine::Settings object.
  PolicyEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");

  // Create a promise for std::shared_ptr<mip::PolicyEngine>.
  auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::PolicyEngine>>>();

  // Instantiate the future from the promise.
  auto engineFuture = enginePromise->get_future();

  // Add the engine using AddEngineAsync, passing in the engine settings and the promise.
  profile->AddEngineAsync(engineSettings, enginePromise);

  // Get the future value and store in std::shared_ptr<mip::PolicyEngine>.
  auto engine = engineFuture.get();

Koden lägger till en motor för den autentiserade användaren i profilen.

Implementering: Lista över känslighetsetiketter

Med hjälp av den tillagda motorn kan du visa alla känslighetsetiketter som är tillgängliga för den autentiserade användaren genom att anropa engine->ListSensitivityLabels().

ListSensitivityLabels() hämtar listan med etiketter och attribut för dessa etiketter för en specifik användare från tjänsten. Resultatet lagras i en vektor av std::shared_ptr<mip::Label>.

Genomförande: ListSensitivityLabels()

std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();

Implementering: Skriv ut etiketterna

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //print the label name
  cout << label->GetName() << endl;
  //Iterate through all child labels
  for (const auto& child : label->GetChildren()) {
    //Print the label with some formatting
    cout << "->  " << child->GetName() << endl;
  }
}

När du skriver ut namnen visas att programmet har hämtat principen från tjänsten och fått etiketterna. Om du vill använda etiketten behöver du etikettidentifieraren. Ändra föregående kodfragment för att returnera etikett-ID:t:

for (const auto& label : labels) {
  //Print label name and GUID
  cout << label->GetName() << " : " << label->GetId() << endl;

  //Print child label name and GUID
  for (const auto& child : label->GetChildren()) {
    cout << "->  " << child->GetName() <<  " : " << child->GetId() << endl;
  }
}

Du kan använda samlingen som mip::Label returneras av ListSensitivityLabels() för att visa alla etiketter som är tillgängliga för användaren och sedan använda ID:t för att tillämpa etiketter på en fil när du väljer det.

Nästa steg