Vérification de l’appartenance aux rôles
Vous pouvez appeler la méthode ISecurityCallContext::IsCallerInRole pour déterminer si l’appelant direct d’un objet est membre d’un rôle particulier. Cette fonctionnalité est utile lorsque vous souhaitez vous assurer qu’un certain bloc de code n’est pas exécuté, sauf si l’appelant est membre d’un rôle particulier.
Par exemple, vous pouvez utiliser IsCallerInRole pour vous assurer que les transactions sur un montant spécifié, comme 1 000 $, sont effectuées uniquement par les membres d’un rôle Gestionnaire. Si l’appelant n’est pas un gestionnaire et que la transaction est supérieure à 1 000 $, la transaction n’est pas effectuée et un message d’erreur s’affiche.
La méthode recommandée pour accéder à IsCallerInRole consiste à utiliser l’objet de contexte d’appel de sécurité, car vous pouvez utiliser la même référence à l’objet de contexte d’appel de sécurité pour obtenir des propriétés de sécurité. Toutefois, vous pouvez également accéder à la méthode IsCallerInRoleà partir de l’objet ObjectContext . (Pour plus d’informations, consultez ObjectContext ou IObjectContext .)
Si vous développez des composants pour une application Microsoft Visual Basic, vous appelez la fonction GetSecurityCallContext , puis utilisez le contexte d’appel de sécurité pour appeler IsCallerInRole, comme illustré dans l’exemple suivant :
If (GetSecurityCallContext.IsCallerInRole("Manager")) Then
' Go ahead and perform the transaction.
Else
' Display an error message.
End If
Si vous développez une application C ou C++, utilisez CoGetCallContext pour récupérer un pointeur vers l’interface ISecurityCallContext . Ensuite, vous appelez ISecurityCallContext::IsCallerInRole, comme illustré dans l’exemple suivant :
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;
Rubriques connexes