Compartir a través de


Comprobación de la pertenencia a roles

Puede llamar al método ISecurityCallContext::IsCallerInRole para determinar si el llamador directo de un objeto es miembro de un rol determinado. Esta funcionalidad es útil cuando desea asegurarse de que un determinado bloque de código no se ejecute a menos que el autor de la llamada sea miembro de un rol determinado.

Por ejemplo, puede usar IsCallerInRole para asegurarse de que las transacciones por encima de una cantidad especificada, como $1000, solo las realizan los miembros de un rol Administradores. Si el autor de la llamada no es un Administrador y la transacción es superior a 1000 USD, no se realiza la transacción y se muestra un mensaje de error.

La manera preferida de acceder a IsCallerInRole es a través del objeto de contexto de llamada de seguridad, ya que puede usar la misma referencia al objeto de contexto de llamada de seguridad para obtener propiedades de seguridad. Sin embargo, también puede acceder al método IsCallerInRoledesde el objeto ObjectContext . (Vea ObjectContext o IObjectContext para obtener más información).

Si está desarrollando componentes para una aplicación de Microsoft Visual Basic, llame a la función GetSecurityCallContext y, a continuación, use el contexto de llamada de seguridad para llamar a IsCallerInRole, como se muestra en el ejemplo siguiente:

If (GetSecurityCallContext.IsCallerInRole("Manager")) Then
   ' Go ahead and perform the transaction.
Else
   ' Display an error message.
End If

Si va a desarrollar una aplicación de C o C++, use CoGetCallContext para recuperar un puntero a la interfaz ISecurityCallContext . A continuación, llama a ISecurityCallContext::IsCallerInRole, como se muestra en el ejemplo siguiente:

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;

Acceso a la información de contexto de llamada de seguridad

Determinar si la seguridad de Role-Based está habilitada

Seguridad de componentes mediante programación