Ü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 Funktion ist nützlich, wenn Sie sicherstellen möchten, dass ein bestimmter Codeblock nur ausgeführt wird, wenn der Aufrufer Mitglied einer bestimmten Rolle ist.
Sie können z. B. 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 1.000 US-Dollar 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 für Sicherheitsaufrufe, da Sie den gleichen Verweis auf das Kontextobjekt für Sicherheitsaufrufe verwenden können, um Sicherheitseigenschaften abzurufen. Sie können jedoch auch über das ObjectContext-Objekt auf die IsCallerInRole-Methode zugreifen. (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 IsCallerInRoleaufzurufen, 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::IsCallerInRoleauf, 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;