Verificando a associação de função
Você pode chamar o método ISecurityCallContext::IsCallerInRole para determinar se o chamador direto de um objeto é membro de uma função específica. Essa funcionalidade é útil quando você deseja garantir que um determinado bloco de código não seja executado, a menos que o chamador seja membro de uma função específica.
Por exemplo, você pode usar IsCallerInRole para garantir que as transações acima de um valor especificado, como US$ 1000, sejam executadas apenas por membros de uma função Gerentes. Se o chamador não for um Gerente e a transação for superior a US$ 1000, a transação não será executada e uma mensagem de erro será exibida.
A maneira preferencial de acessar IsCallerInRole é por meio do objeto de contexto de chamada de segurança, pois você pode usar a mesma referência ao objeto de contexto de chamada de segurança para obter propriedades de segurança. No entanto, você também pode acessar o método IsCallerInRoledo objeto ObjectContext . (Veja ObjectContext ou IObjectContext para obter mais informações.)
Se você estiver desenvolvendo componentes para um aplicativo do Microsoft Visual Basic, chame a função GetSecurityCallContext e, em seguida, use o contexto de chamada de segurança para chamar IsCallerInRole, conforme mostrado no exemplo a seguir:
If (GetSecurityCallContext.IsCallerInRole("Manager")) Then
' Go ahead and perform the transaction.
Else
' Display an error message.
End If
Se você estiver desenvolvendo um aplicativo C ou C++, use CoGetCallContext para recuperar um ponteiro para a interface ISecurityCallContext. Em seguida, você chama ISecurityCallContext::IsCallerInRole, conforme mostrado no exemplo a seguir:
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;
Tópicos relacionados