Compartilhar via


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;

Acessando informações de contexto de chamada de segurança

Determinando se a segurança baseada em função está habilitada

Segurança de componentes programáticos