Microsoft Information Protection SDK - Concetti relativi al motore di Policy SDK

mip::PolicyEngine implementa tutte le operazioni che l'SDK dei criteri può eseguire, ad eccezione del caricamento del profilo.

Implementazione: aggiungere un motore di policy

Implementazione: creare le impostazioni del motore delle policy

Analogamente a un profilo, il motore richiede anche un oggetto impostazioni, mip::PolicyEngine::Settings. Questo oggetto archivia l'identificatore univoco del motore, un oggetto dell'implementazione mip::AuthDelegate , i dati client personalizzabili per il debug o la telemetria e, facoltativamente, le impostazioni locali.

L'esempio seguente crea un PolicyEngine::Settings oggetto denominato engineSettings usando l'identità dell'utente dell'applicazione:

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.

Quando si creano engineSettings in questo modo, imposta anche in modo esplicito un engineId univoco:

engineSettings.SetEngineId(engineId);

L'uso del nome utente o del messaggio di posta elettronica garantisce che lo stesso motore venga caricato ogni volta che l'utente usa il servizio o l'applicazione.

È anche valido fornire un ID motore personalizzato:

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.

Come procedura consigliata, utilizzare come primo parametro id, che collega il motore all'utente associato, preferibilmente il nome dell'entità utente principale.

Implementazione: aggiungere il motore dei criteri

Per aggiungere il motore, torna al pattern future/promise utilizzato per caricare il profilo. Anziché creare la promessa per mip::Profile, usare 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();

Il codice aggiunge un motore per l'utente autenticato al profilo.

Implementazione: elencare le etichette di riservatezza

Usando il motore aggiunto, è possibile elencare tutte le etichette di riservatezza disponibili per l'utente autenticato chiamando engine->ListSensitivityLabels().

ListSensitivityLabels() recupera l'elenco di etichette e attributi di tali etichette per un utente specifico del servizio. Il risultato viene archiviato in un vettore di std::shared_ptr<mip::Label>.

Implementazione: ListSensitivityLabels()

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

Implementazione: stampare le etichette

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

La stampa dei nomi mostra che l'applicazione ha eseguito correttamente il pull dei criteri dal servizio e ha ottenuto le etichette. Per applicare l'etichetta, è necessario l'identificatore dell'etichetta. Modificare il frammento di codice precedente per restituire l'ID etichetta:

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

È possibile utilizzare la raccolta di mip::Label restituita da ListSensitivityLabels() per visualizzare tutte le etichette disponibili per l'utente e quindi, una volta selezionata un'etichetta, usare l'ID per applicare le etichette a un file.

Passaggi successivi