Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пакет SDK для файлов MIP предоставляет интерфейс для всех операций, выполняемых от имени указанной личности. Один двигатель будет добавлен для каждого пользователя, который входит в приложение, и все операции, выполняемые двигателем, будут выполняться в контексте этой личности.
У FileEngine
него есть две основные обязанности: перечисление меток для пользователя, прошедшего проверку подлинности, и создание обработчиков файлов для выполнения операций с файлами от имени пользователя.
mip::FileEngine
-
ListSensitivityLabels()
: получает список меток для загруженного движка. -
CreateFileHandler()
: создаетmip::FileHandler
для конкретного файла или потока.
Добавление обработчика файлов
Как описано в объектах Profile и Engine, движок может иметь два состояния - CREATED
или LOADED
. Если это не одно из этих двух состояний, он не существует. Для создания и загрузки состояния необходимо выполнить только один вызов FileProfile::LoadAsync
. Если движок уже существует в кэшированном состоянии, он будет LOADED
. Если он не существует, он будет CREATED
и LOADED
.
CREATED
означает, что приложение содержит всю информацию от службы, необходимую для загрузки движка.
LOADED
подразумевает, что все структуры данных, необходимые для использования подсистемы, были созданы в памяти.
Создание параметров обработчика файлов
Аналогично профилю, обработчику также требуется объект параметров. mip::FileEngine::Settings
Этот объект хранит уникальный идентификатор двигателя, реализацию mip::AuthDelegate
, настраиваемые клиентские данные, которые можно использовать для отладки или телеметрии, а также, если необходимо, языковой стандарт.
Здесь мы создадим FileEngine::Settings
объект с именем engineSettings с помощью удостоверения пользователя приложения.
FileEngine::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.
При создании engineSettings таким образом важно также явно задать уникальный engineId с помощью:
engineSettings.SetEngineId(engineId);
Использование имени пользователя или электронной почты помогает убедиться, что один и тот же механизм загружается каждый раз, когда пользователь использует службу или приложение.
Также допустимо предоставление пользовательского идентификатора движка.
FileEngine::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.
В качестве рекомендации первый параметр id
должен быть чем-то, что позволяет обработчику легко подключаться к соответствующему пользователю. Например, адрес электронной почты, UPN или GUID объекта AAD гарантирует, что идентификатор будет уникальным и может быть загружен из локального состояния без вызова службы.
Добавление обработчика файлов
Чтобы добавить двигатель, мы вернемся к шаблону обещания/фьючерса, используемому для загрузки профиля. Вместо того чтобы создавать обещание для mip::FileProfile
, оно создается с помощью mip::FileEngine
.
//auto profile will be std::shared_ptr<mip::FileProfile>
auto profile = profileFuture.get();
// Instantiate the AuthDelegate implementation.
auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);
//Create the FileEngine::Settings object
FileEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");
//Create a promise for std::shared_ptr<mip::FileEngine>
auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::FileEngine>>>();
//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::FileEngine>
auto engine = engineFuture.get();
Конечным результатом приведенного выше кода является добавление движка для аутентифицированного пользователя в профиль.
Список меток чувствительности
Используя добавленный обработчик, теперь можно перечислить все метки конфиденциальности, доступные для пользователя, прошедшего проверку подлинности, путем вызова engine->ListSensitivityLabels()
.
ListSensitivityLabels()
Будет получен список меток и атрибутов этих меток для конкретного пользователя из службы. Результат хранится в векторе std::shared_ptr<mip::Label>
.
Дополнительные сведения см. здесьmip::Label
.
Список меток чувствительности()
std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();
Или упрощено:
auto labels = engine->ListSensitivityLabels();
Печать меток и идентификаторов
Печать имен — это простой способ показать, что мы успешно извлекли политику из службы и смогли получить метки. Чтобы применить метку, требуется идентификатор метки. Приведенный ниже код выполняет итерацию по всем меткам, отображая name
и id
для каждой родительской и дочерней метки.
//Iterate through all labels in the vector
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
, возвращаемая GetSensitivityLabels()
, может быть использована для отображения всех меток, доступных пользователю, а затем, при выборе, можно использовать идентификатор для применения меток к файлу.
Следующие шаги
Теперь, когда профиль загружен, двигатель добавлен, и у нас есть метки, мы можем добавить обработчик, чтобы начать читать, записывать или удалять метки из файлов. См. обработчики файлов в SDK MIP.