SDK Microsoft Information Protection - Concepts du moteur SDK de stratégie

mip::PolicyEngine implémente toutes les opérations que le Kit de développement logiciel (SDK) de stratégie peut effectuer, à l’exception du chargement du profil.

Implémentation : Ajouter un moteur de stratégie

Implémentation : Créer des paramètres du moteur de stratégie

Comme pour un profil, le moteur nécessite également un objet de paramètres. mip::PolicyEngine::Settings Cet objet stocke l’identificateur de moteur unique, un objet de votre mip::AuthDelegate implémentation, des données client personnalisables pour le débogage ou la télémétrie, et éventuellement les paramètres régionaux.

L’exemple suivant crée un PolicyEngine::Settings objet appelé engineSettings à l’aide de l’identité de l’utilisateur de l’application :

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.

Lors de la création de engineSettings de cette manière, définissez également explicitement un engineId unique :

engineSettings.SetEngineId(engineId);

L’utilisation du nom d’utilisateur ou de l’e-mail permet de s’assurer que le même moteur se charge chaque fois que l’utilisateur utilise le service ou l’application.

Il est également possible de spécifier un ID de moteur personnalisé :

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.

En guise de meilleure pratique, utilisez un premier paramètre, ID, qui connecte le moteur à l’utilisateur associé, de préférence le nom d’utilisateur principal.

Implémentation : Ajouter le moteur de stratégie

Pour ajouter le moteur, revenez au modèle futur/de promesse utilisé pour charger le profil. Au lieu de créer la promesse pour mip::Profile, utilisez 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();

Le code ajoute un moteur pour l’utilisateur authentifié au profil.

Implémentation : Répertorier les étiquettes de confidentialité

À l’aide du moteur ajouté, vous pouvez répertorier toutes les étiquettes de confidentialité disponibles pour l’utilisateur authentifié en appelant engine->ListSensitivityLabels().

ListSensitivityLabels() récupère la liste des étiquettes et des attributs de ces étiquettes pour un utilisateur spécifique du service. Le résultat est stocké dans un vecteur de std::shared_ptr<mip::Label>.

Implémentation : ListSensitivityLabels()

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

Implémentation : Imprimer les étiquettes

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

L’impression des noms indique que l’application a extrait avec succès la stratégie depuis le service et a obtenu les étiquettes. Pour appliquer l’étiquette, vous avez besoin de l’identificateur d’étiquette. Modifiez l’extrait de code précédent pour retourner l’ID d’étiquette :

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

Vous pouvez utiliser la collection de mip::Label renvoyée par ListSensitivityLabels() pour afficher toutes les étiquettes disponibles pour l’utilisateur, puis, une fois une étiquette sélectionnée, utiliser l’ID pour appliquer des étiquettes à un fichier.

Étapes suivantes