Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
mip::PolicyEngine implementa todas as operações que o Policy SDK pode realizar, com exceção do carregamento do perfil.
Implementação: Adicionar um motor de políticas
Implementação: Criar definições do motor de políticas
Semelhante a um perfil, o motor também requer um objeto de definições, mip::PolicyEngine::Settings. Este objeto armazena o identificador único do motor, um objeto da sua mip::AuthDelegate implementação, dados personalizáveis do cliente para depuração ou telemetria e, opcionalmente, a localização.
O exemplo seguinte cria um PolicyEngine::Settings objeto chamado engineSettings usando a identidade do utilizador da aplicação:
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 desta forma, defina também explicitamente um engineId único:
engineSettings.SetEngineId(engineId);
Usar o nome de utilizador ou email ajuda a garantir que o mesmo motor carrega sempre que o utilizador utiliza o serviço ou aplicação.
Também é válido fornecer um ID 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 boa prática, use um primeiro parâmetro, id, que ligue o motor ao utilizador associado, preferencialmente o nome principal do utilizador.
Implementação: Adicionar o motor de políticas
Para adicionar o mecanismo, regresse ao padrão future/promise utilizado para carregar o perfil. Em vez de criar a promessa para mip::Profile, use 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 código adiciona um motor para o utilizador autenticado ao perfil.
Implementação: Listar etiquetas de confidencialidade
Usando o motor adicional, pode listar todas as etiquetas de sensibilidade disponíveis para o utilizador autenticado chamando engine->ListSensitivityLabels().
ListSensitivityLabels() obtém a lista de etiquetas e atributos desses rótulos para um utilizador específico do serviço. O resultado é armazenado num 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 mostra que a aplicação conseguiu retirar a política do serviço e obteve as etiquetas. Para aplicar a etiqueta, precisa do identificador da etiqueta. Modificar o excerto anterior para devolver o ID da etiqueta:
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;
}
}
Pode utilizar a coleção de mip::Label devolvida por ListSensitivityLabels() para apresentar todas as etiquetas disponíveis para o utilizador e, em seguida, quando estas forem selecionadas, utilizar o ID para aplicar etiquetas a um ficheiro.