Dela via


Microsoft Information Protection SDK – Princip-SDK-motorbegrepp

mip::PolicyEngine implementerar alla åtgärder som princip-SDK kan utföra, med undantag för inläsning av profilen.

Implementering: Lägga till en principmotor

Implementering: Skapa principmotor Inställningar

Precis som en profil kräver motorn också ett inställningsobjekt, mip::PolicyEngine::Settings. Det här objektet lagrar den unika motoridentifieraren, ett objekt i implementeringen mip::AuthDelegate , anpassningsbara klientdata som kan användas för felsökning eller telemetri och, om du vill, språkvarianten.

Här skapar vi ett FileEngine::Settings objekt med namnet engine Inställningar med hjälp av programanvändarens identitet:

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.

När du skapar motorn Inställningar på det här sättet är det viktigt att du också uttryckligen anger ett unikt engineId via:

engineSettings.SetEngineId(engineId);

Genom att använda användarnamnet eller e-postmeddelandet ser du till att samma motor läses in varje gång användaren använder tjänsten eller programmet.

Giltigt är också att tillhandahålla ett anpassat motor-ID:

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.

Bästa praxis är att den första parametern, ID, är något som gör att motorn enkelt kan anslutas till den associerade användaren, helst användarens huvudnamn.

Implementering: Lägg till principmotorn

För att lägga till motorn går vi tillbaka till det framtida/löftesmönster som används för att läsa in profilen. I stället för att skapa löftet för mip::Profileanvänder mip::PolicyEnginevi .


  // 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();

Slutresultatet av koden ovan är att vi har lagt till en motor för den autentiserade användaren i profilen.

Implementering: Lista känslighetsetiketter

Med den tillagda motorn går det nu att lista alla känslighetsetiketter som är tillgängliga för den autentiserade användaren genom att anropa engine->ListSensitivityLabels().

ListSensitivityLabels() hämtar listan med etiketter och attribut för dessa etiketter för en specifik användare från tjänsten. Resultatet lagras i en vektor av std::shared_ptr<mip::Label>.

Implementering: ListSensitivityLabels()

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

Implementering: Skriv ut etiketterna

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

Att skriva ut namnen är ett enkelt sätt att visa att vi har hämtat principen från tjänsten och kunde hämta etiketterna. Om du vill använda etiketten krävs etikettidentifieraren. Ändra kodfragmentet ovan för att returnera etikett-ID:t i:

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

Samlingen som mip::Label returneras av ListSensitivityLabels() kan användas för att visa alla etiketter som är tillgängliga för användaren och sedan använda ID:t för att tillämpa etiketter på en fil när du väljer det.