Überprüfen der Rollenmitgliedschaft

Sie können die ISecurityCallContext::IsCallerInRole-Methode aufrufen, um zu bestimmen, ob der direkte Aufrufer eines Objekts Mitglied einer bestimmten Rolle ist. Diese Funktionalität ist nützlich, wenn Sie sicherstellen möchten, dass ein bestimmter Codeblock nicht ausgeführt wird, es sei denn, der Aufrufer ist Mitglied einer bestimmten Rolle.

Sie können beispielsweise IsCallerInRole verwenden, um sicherzustellen, dass Transaktionen über einen bestimmten Betrag, z. B. 1000 USD, nur von Mitgliedern einer Manager-Rolle ausgeführt werden. Wenn der Aufrufer kein Manager ist und die Transaktion über 1000 USD liegt, wird die Transaktion nicht ausgeführt, und es wird eine Fehlermeldung angezeigt.

Die bevorzugte Methode für den Zugriff auf IsCallerInRole ist das Kontextobjekt des Sicherheitsaufrufs, da Sie denselben Verweis auf das Sicherheitsaufrufkontextobjekt verwenden können, um Sicherheitseigenschaften abzurufen. Sie können jedoch auch über das ObjectContext-Objekt auf die IsCallerInRole-Methodezugreifen. (Weitere Informationen finden Sie unter ObjectContext oder IObjectContext .)

Wenn Sie Komponenten für eine Microsoft Visual Basic-Anwendung entwickeln, rufen Sie die GetSecurityCallContext-Funktion auf und verwenden dann den Sicherheitsaufrufkontext, um IsCallerInRole aufzurufen, wie im folgenden Beispiel gezeigt:

If (GetSecurityCallContext.IsCallerInRole("Manager")) Then
   ' Go ahead and perform the transaction.
Else
   ' Display an error message.
End If

Wenn Sie eine C- oder C++-Anwendung entwickeln, verwenden Sie CoGetCallContext , um einen Zeiger auf die ISecurityCallContext-Schnittstelle abzurufen. Anschließend rufen Sie ISecurityCallContext::IsCallerInRole auf, wie im folgenden Beispiel gezeigt:

ISecurityCallContext* pSecCtx;
VARIANT_BOOL bIsInRole;

HRESULT hr = CoGetCallContext(IID_ISecurityCallContext, (void**)&pSecCtx);
if (FAILED(hr)) throw(hr);
if (NULL == pSecCtx) { 
    // No security call context is available.
    // Display an error message and return.
    return E_FAIL;
}
hr = pSecCtx->IsCallerInRole(myRole, &bIsInRole);
return hr;

Zugreifen auf Sicherheitsaufrufkontextinformationen

Bestimmen, ob Role-Based Sicherheit aktiviert ist

Programmgesteuerte Komponentensicherheit