Пакет SDK Для Microsoft Information Protection — основные понятия подсистемы SDK для политик
mip::PolicyEngine
реализует все операции, которые может выполнять пакет SDK политики, за исключением загрузки профиля.
Реализация: добавление обработчика политик
Реализация. Создание подсистемы политик Параметры
Аналогично профилю, обработчику также требуется объект параметров. mip::PolicyEngine::Settings
Этот объект хранит уникальный идентификатор обработчика, объект реализации mip::AuthDelegate
, настраиваемые клиентские данные, которые можно использовать для отладки или телеметрии, а также, при необходимости, языкового стандарта.
Здесь мы создадим FileEngine::Settings
объект с именем engine Параметры используя удостоверение пользователя приложения:
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.
При создании подсистемы Параметры таким образом, важно также явно задать уникальный engineId с помощью:
engineSettings.SetEngineId(engineId);
Использование имени пользователя или электронной почты помогает убедиться, что один и тот же механизм загружается каждый раз, когда пользователь использует службу или приложение.
Также допустимым является предоставление пользовательского идентификатора обработчика:
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.
Как рекомендуется, первый параметр, идентификатор, должен быть чем-то, что позволяет обработчику легко подключаться к связанному пользователю, предпочтительно имя участника-пользователя.
Реализация. Добавление обработчика политик
Чтобы добавить подсистему, мы вернемся к шаблону будущего или обещания, используемому для загрузки профиля. Вместо создания обещания mip::Profile
мы будем использовать 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();
Конечным результатом приведенного выше кода является то, что мы успешно добавили подсистему для прошедшего проверку подлинности пользователя в профиль.
Реализация. Перечисление меток конфиденциальности
Используя добавленный обработчик, теперь можно перечислить все метки конфиденциальности, доступные для пользователя, прошедшего проверку подлинности, путем вызова engine->ListSensitivityLabels()
.
ListSensitivityLabels()
Будет получен список меток и атрибутов этих меток для конкретного пользователя из службы. Результат хранится в векторе std::shared_ptr<mip::Label>
.
Реализация: ListSensitivityLabels()
std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();
Реализация: печать меток
//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;
}
}
Печать имен — это простой способ показать, что мы успешно извлекали политику из службы и смогли получить метки. Чтобы применить метку, требуется идентификатор метки. Изменение приведенного выше фрагмента для возврата идентификатора метки приводит к следующему:
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;
}
}
Коллекцию mip::Label
возвращаемых ListSensitivityLabels()
можно использовать для отображения всех меток, доступных пользователю, а затем при выборе используйте идентификатор для применения меток к файлу.