Поделиться через


Пакет 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() можно использовать для отображения всех меток, доступных пользователю, а затем при выборе используйте идентификатор для применения меток к файлу.