SDK de Microsoft Information Protection: Conceptos del motor del SDK de directivas

mip::PolicyEngine implementa todas las operaciones que puede realizar el SDK de directivas, a excepción de la carga del perfil.

Implementación: Agregar un motor de directivas

Implementación: Creación de la configuración del motor de directivas

De forma similar a un perfil, el motor también requiere un objeto de configuración: mip::PolicyEngine::Settings. Este objeto almacena el identificador único del motor, un objeto de la implementación de mip::AuthDelegate, datos de cliente personalizables que se pueden usar para la depuración o telemetría, y, opcionalmente, la configuración regional.

Aquí se crea un objeto FileEngine::Settings denominado engineSettings mediante la identidad del usuario de la aplicación:

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.

Al crear engineSettings de esta manera, es importante establecer de manera explícita un engineId único a través de:

engineSettings.SetEngineId(engineId);

El uso del nombre de usuario o correo electrónico ayuda a asegurarse de que se cargue el mismo motor cada vez que el usuario use el servicio o la aplicación.

También es válido proporcionar un identificador de motor personalizado:

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.

Como procedimiento recomendado, el primer parámetro, id, debe ser un elemento que permita que el motor se conecte fácilmente al usuario asociado, preferiblemente el nombre principal de usuario.

Implementación: agregar el motor de directivas

Para agregar el motor, volveremos al patrón futuro/promesa usado para cargar el perfil. En lugar de crear la promesa para mip::Profile, usaremos 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();

El resultado final del código anterior es que hemos agregado correctamente un motor para el usuario autenticado en el perfil.

Implementación: Enumeración de etiquetas de confidencialidad

Con el motor agregado, ya podemos enumerar todas las etiquetas de confidencialidad disponibles para el usuario autenticado mediante una llamada a engine->ListSensitivityLabels().

ListSensitivityLabels() capturará la lista de etiquetas y atributos de esas etiquetas para un usuario específico del servicio. El resultado se almacena en un vector de std::shared_ptr<mip::Label>.

Implementación: ListSensitivityLabels()

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

Implementación: Impresión de las etiquetas

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

Imprimir los nombres es una manera fácil de mostrar que hemos extraído correctamente la directiva del servicio y hemos podido obtener las etiquetas. Para aplicar la etiqueta, se requiere el identificador de etiqueta. La modificación del fragmento anterior para devolver el identificador de etiqueta da como resultado lo siguiente:

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 colección de mip::Label devuelta por ListSensitivityLabels() se puede usar para mostrar todas las etiquetas disponibles para el usuario y, a continuación, cuando se selecciona, permite usar el identificador para aplicar etiquetas a un archivo.