Condividi tramite


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 criteri

Implementazione: Creare Impostazioni motore di criteri

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 , dati client personalizzabili che possono essere usati per il debug o la telemetria e, facoltativamente, le impostazioni locali.

In questo esempio viene creato un FileEngine::Settings oggetto denominato motore Impostazioni 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 crea il motore Impostazioni in questo modo, è importante impostare in modo esplicito anche un engineId univoco tramite:

engineSettings.SetEngineId(engineId);

L'uso del nome utente o del messaggio di posta elettronica consente di assicurarsi 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, il primo parametro, id, deve essere qualcosa che consente al motore di essere facilmente connesso all'utente associato, preferibilmente il nome dell'entità utente.

Implementazione: aggiungere il motore dei criteri

Per aggiungere il motore, si tornerà al modello futuro/promessa usato per caricare il profilo. Anziché creare la promessa per mip::Profile, si userà 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 risultato finale del codice precedente è che è stato aggiunto un motore per l'utente autenticato al profilo.

Implementazione: Elencare le etichette di riservatezza

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

ListSensitivityLabels() recupererà l'elenco di etichette e attributi di tali etichette per un utente specifico dal 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 è un modo semplice per mostrare che i criteri sono stati estratti correttamente dal servizio e sono stati in grado di ottenere le etichette. Per applicare l'etichetta, è necessario l'identificatore dell'etichetta. Modifica dell'snip precedente per restituire i risultati dell'ID etichetta 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;
  }
}

La raccolta di mip::Label restituiti da ListSensitivityLabels() può essere utilizzata per visualizzare tutte le etichette disponibili per l'utente e quindi, se selezionato, usare l'ID per applicare etichette a un file.