Verifica dell'appartenenza al ruolo
È possibile chiamare il metodo ISecurityCallContext::IsCallerInRole per determinare se il chiamante diretto di un oggetto è membro di un ruolo specifico. Questa funzionalità è utile quando si vuole assicurarsi che un determinato blocco di codice non venga eseguito a meno che il chiamante non sia membro di un ruolo specifico.
Ad esempio, è possibile usare IsCallerInRole per garantire che le transazioni su un importo specificato, ad esempio $ 1000, vengano eseguite solo dai membri di un ruolo Manager. Se il chiamante non è un manager e la transazione è superiore a $1000, la transazione non viene eseguita e viene visualizzato un messaggio di errore.
Il modo preferito per accedere a IsCallerInRole è tramite l'oggetto contesto di chiamata di sicurezza perché è possibile usare lo stesso riferimento all'oggetto contesto delle chiamate di sicurezza per ottenere le proprietà di sicurezza. Tuttavia, è anche possibile accedere al metodo IsCallerInRoledall'oggetto ObjectContext . (Vedere ObjectContext o IObjectContext per altre informazioni.
Se si sviluppano componenti per un'applicazione Microsoft Visual Basic, chiamare la funzione GetSecurityCallContext e quindi usare il contesto delle chiamate di sicurezza per chiamare IsCallerInRole, come illustrato nell'esempio seguente:
If (GetSecurityCallContext.IsCallerInRole("Manager")) Then
' Go ahead and perform the transaction.
Else
' Display an error message.
End If
Se si sviluppa un'applicazione C o C++, usare CoGetCallContext per recuperare un puntatore all'interfaccia ISecurityCallContext. Chiamare quindi ISecurityCallContext::IsCallerInRole, come illustrato nell'esempio seguente:
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;
Argomenti correlati