Delen via


Microsoft Information Protection SDK - Concepten van beleids-SDK-engine

mip::PolicyEngine implementeert alle bewerkingen die de Beleids-SDK kan uitvoeren, met uitzondering van het laden van het profiel.

Implementatie: Een beleidsengine toevoegen

Implementatie: Beleidsengine maken Instellingen

Net als bij een profiel vereist de engine ook een instellingenobject. mip::PolicyEngine::Settings Dit object slaat de unieke engine-id, een object van uw mip::AuthDelegate implementatie, aanpasbare clientgegevens op die kunnen worden gebruikt voor foutopsporing of telemetrie, en, optioneel, de landinstelling.

Hier maken we een FileEngine::Settings object met de naam engine Instellingen met behulp van de identiteit van de toepassingsgebruiker:

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.

Wanneer u een engine maakt Instellingen op deze manier, is het belangrijk om ook expliciet een unieke engineId in te stellen via:

engineSettings.SetEngineId(engineId);

Door de gebruikersnaam of e-mail te gebruiken, zorgt u ervoor dat dezelfde engine telkens wordt geladen wanneer de gebruiker de service of toepassing gebruikt.

Geldig is ook het verstrekken van een aangepaste engine-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.

Als best practice moet de eerste parameter, id, iets zijn waarmee de engine eenvoudig kan worden verbonden met de bijbehorende gebruiker, bij voorkeur de principal-naam van de gebruiker.

Implementatie: De beleidsengine toevoegen

Om de engine toe te voegen, gaan we terug naar het toekomstige/beloftepatroon dat wordt gebruikt om het profiel te laden. In plaats van de belofte voor mip::Profilete maken, gebruiken mip::PolicyEnginewe .


  // 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();

Het eindresultaat van de bovenstaande code is dat we een engine voor de geverifieerde gebruiker aan het profiel hebben toegevoegd.

Implementatie: Vertrouwelijkheidslabels vermelden

Met behulp van de toegevoegde engine is het nu mogelijk om alle vertrouwelijkheidslabels weer te geven die beschikbaar zijn voor de geverifieerde gebruiker door aan te roepen engine->ListSensitivityLabels().

ListSensitivityLabels() haalt de lijst met labels en kenmerken van deze labels op voor een specifieke gebruiker van de service. Het resultaat wordt opgeslagen in een vector van std::shared_ptr<mip::Label>.

Implementatie: ListSensitivityLabels()

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

Implementatie: de etiketten afdrukken

//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;
  }
}

Het afdrukken van de namen is een eenvoudige manier om aan te geven dat we beleid hebben opgehaald uit de service en de labels konden ophalen. Als u het label wilt toepassen, is de label-id vereist. Als u het bovenstaande knipsel wijzigt om de label-id te retourneren, resulteert dit in:

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;
  }
}

De verzameling geretourneerde mip::LabelListSensitivityLabels() items kan worden gebruikt om alle labels weer te geven die beschikbaar zijn voor de gebruiker. Wanneer deze optie is geselecteerd, gebruikt u de id om labels toe te passen op een bestand.