Teilen über


Microsoft Information Protection SDK - Konzepte der Policy SDK-Engine

mip::PolicyEngine implementiert alle Vorgänge, die das Policy SDK durchführen kann, mit Ausnahme des Ladens des Profils.

Implementierung: Hinzufügen einer Richtlinienengine

Implementierung: Erstellen von Richtlinienengine-Einstellungen

Ähnlich wie bei einem Profil erfordert die Engine auch ein Einstellungsobjekt, mip::PolicyEngine::Settings. Dieses Objekt speichert den eindeutigen Enginebezeichner, ein Objekt Ihrer mip::AuthDelegate-Implementierung, anpassbare Client-Daten, die für Debugging oder Telemetrie verwendet werden können, und optional das Gebietsschema.

Hier erstellen wir ein FileEngine::Settings Objekt namens engineSettings unter Verwendung der Identität des Anwendungsbenutzers:

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.

Beim Erstellen von EngineSettings auf diese Weise ist es wichtig, auch explizit eine eindeutige EngineId über folgendes festzulegen:

engineSettings.SetEngineId(engineId);

Die Verwendung des Benutzernamens oder der E-Mail trägt dazu bei, dass jedes Mal, wenn der Benutzer den Dienst oder die Anwendung nutzt, dieselbe Engine geladen wird.

Auch gültig ist die Bereitstellung einer benutzerdefinierten Modul-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 bewährte Methode sollte der erste Parameter, die ID, etwas sein, das es der Engine ermöglicht, leicht mit dem zugehörigen Benutzer verbunden zu werden, vorzugsweise dem Benutzerprinzipalnamen.

Implementierung: Hinzufügen der Richtlinienengine

Um die Engine hinzuzufügen, kehren wir zum Zukünftigen/Zusagemuster zurück, das zum Laden des Profils verwendet wird. Anstatt die Zusage für mip::Profile zu erstellen, verwenden wir 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();

Das Endergebnis des obigen Codes ist, dass wir dem Profil erfolgreich eine Engine für den authentifizierten Benutzer hinzugefügt haben.

Implementierung: Auflisten von Vertraulichkeitsbezeichnungen

Mithilfe der hinzugefügten Engine können jetzt alle Vertraulichkeitsbezeichnungen aufgeführt werden, die für den authentifizierten Benutzer verfügbar sind, indem sie engine->ListSensitivityLabels() aufrufen.

ListSensitivityLabels() ruft die Liste der Bezeichnungen und Attribute dieser Bezeichnungen für einen bestimmten Benutzer aus dem Dienst ab. Das Ergebnis wird in einem Vektor von std::shared_ptr<mip::Label> gespeichert.

Implementierung: ListSensitivityLabels()

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

Implementierung: Drucken der Bezeichnungen

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

Das Drucken der Namen ist eine einfache Möglichkeit, zu zeigen, dass wir die Richtlinie erfolgreich aus dem Dienst abgerufen und die Bezeichnungen erhalten konnten. Um die Bezeichnung anzuwenden, ist der Bezeichnungsbezeichner erforderlich. Wenn Sie den obigen Snip ändern, um die Bezeichnungs-ID zurückzugeben, führt dies zu folgenden Ergebnissen:

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

Die Sammlung der mip::Label, zurückgegeben von ListSensitivityLabels(), kann verwendet werden, um alle Bezeichnungen anzuzeigen, die dem Benutzer zur Verfügung stehen, und dann, wenn ausgewählt, die ID verwenden, um Bezeichnungen auf eine Datei anzuwenden.