Partilhar via


SDK da Proteção de Informações da Microsoft - Conceitos do mecanismo SDK de Política

mip::PolicyEngine implementa todas as operações que o Policy SDK pode executar, com exceção do carregamento do perfil.

Implementação: Adicionar um mecanismo de política

Implementação: Criar configurações do mecanismo de política

Semelhante a um perfil, o mecanismo também requer um objeto de configurações, mip::PolicyEngine::Settings. Este objeto armazena o identificador de mecanismo exclusivo, um objeto de sua mip::AuthDelegate implementação, dados de cliente personalizáveis que podem ser usados para depuração ou telemetria e, opcionalmente, a localidade.

Aqui criamos um FileEngine::Settings objeto chamado engineSettings usando a identidade do usuário do aplicativo:

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.

Ao criar engineSettings dessa maneira, é importante também definir explicitamente um engineId exclusivo via:

engineSettings.SetEngineId(engineId);

Usar o nome de usuário ou e-mail ajuda a garantir que o mesmo mecanismo seja carregado cada vez que o usuário usa o serviço ou aplicativo.

Também é válido fornecer um ID de mecanismo 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 prática recomendada, o primeiro parâmetro, id, deve ser algo que permita que o mecanismo seja facilmente conectado ao usuário associado, de preferência o nome principal do usuário.

Implementação: Adicionar o mecanismo de política

Para adicionar o mecanismo, voltaremos ao padrão futuro/promessa usado para carregar o perfil. Em vez de criar a promessa para mip::Profile, vamos usar 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();

O resultado final do código acima é que adicionamos com sucesso um mecanismo para o usuário autenticado ao perfil.

Implementação: Listar rótulos de sensibilidade

Usando o mecanismo adicionado, agora é possível listar todos os rótulos de sensibilidade disponíveis para o usuário autenticado chamando engine->ListSensitivityLabels().

ListSensitivityLabels() buscará a lista de rótulos e atributos desses rótulos para um usuário específico do serviço. O resultado é armazenado em um vetor de std::shared_ptr<mip::Label>.

Implementação: ListSensitivityLabels()

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

Implementação: Imprimir as 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 os nomes é uma maneira fácil de mostrar que conseguimos extrair a política do serviço e conseguimos obter as etiquetas. Para aplicar o rótulo, é necessário o identificador do rótulo. Modificar o trecho acima para retornar o ID do rótulo resulta em:

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

A coleção de retornados mip::Label por ListSensitivityLabels() pode ser usada para exibir todos os rótulos disponíveis para o usuário e, em seguida, quando selecionado, usar o ID para aplicar rótulos a um arquivo.