Megosztás a következőn keresztül:


Microsoft Information Protection SDK – Policy SDK motorkoncepciók

mip::PolicyEngine Implementálja a Policy SDK által elvégezhető összes műveletet, a profil betöltése kivételével.

Implementáció: Szabályzatmotor hozzáadása

Megvalósítás: Szabályzatmotor létrehozása Gépház

A profilhoz hasonlóan a motorhoz egy beállításobjektum is szükséges. mip::PolicyEngine::Settings Ez az objektum tárolja az egyedi motorazonosítót, a mip::AuthDelegate megvalósítás objektumát, a hibakereséshez vagy telemetriához használható testreszabható ügyféladatokat, és opcionálisan a területi beállításokat.

Itt létrehozunk egy FileEngine::Settings motor nevű objektumot Gépház az alkalmazás felhasználójának identitásával:

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.

A motor létrehozásakor Gépház így fontos, hogy egy egyedi motorazonosítót is explicit módon állítson be a következő módon:

engineSettings.SetEngineId(engineId);

A felhasználónév vagy e-mail használatával biztosítható, hogy a felhasználó minden alkalommal betöltse ugyanazt a motort, amikor a felhasználó használja a szolgáltatást vagy az alkalmazást.

Az is érvényes, ha egyéni motorazonosítót ad meg:

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.

Ajánlott eljárásként az első paraméternek, az azonosítónak olyannak kell lennie, amely lehetővé teszi, hogy a motor könnyen kapcsolódjon a társított felhasználóhoz, lehetőleg a felhasználónévhez.

Megvalósítás: A szabályzatmotor hozzáadása

A motor hozzáadásához visszatérünk a profil betöltéséhez használt jövőbeli/ígéretes mintához. Ahelyett, hogy létrehoznánk az ígéretet mip::Profile, használjuk 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();

A fenti kód végeredménye, hogy sikeresen hozzáadtunk egy motort a hitelesített felhasználóhoz a profilhoz.

Implementáció: Bizalmassági címkék listázása

A hozzáadott motor használatával mostantól a hitelesített felhasználó számára elérhető összes bizalmassági címke listázható a hívással engine->ListSensitivityLabels().

ListSensitivityLabels() lekéri az adott felhasználó címkéinek és attribútumainak listáját a szolgáltatásból. Az eredményt a rendszer a következő vektorban std::shared_ptr<mip::Label>tárolja: .

Megvalósítás: ListSensitivityLabels()

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

Megvalósítás: A címkék nyomtatása

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

A nevek nyomtatásával egyszerűen megmutathatjuk, hogy sikeresen lekértük a szabályzatot a szolgáltatásból, és sikerült lekérni a címkéket. A címke alkalmazásához a címkeazonosítóra van szükség. A fenti sznip módosítása a címkeazonosító eredményének visszaadásához:

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 visszaadott ListSensitivityLabels() címkék gyűjteményével mip::Label megjelenítheti a felhasználó számára elérhető összes címkét, majd ha ki van választva, az azonosítóval címkéket alkalmazhat egy fájlra.