ロール メンバシップの確認

ISecurityCallContext::IsCallerInRole メソッドを呼び出すことで、オブジェクトの直接の呼び出し元が特定のロールのメンバーであるかどうかを判断することができます。 この機能は、呼び出し元が特定のロールのメンバーでない限り、特定のコード ブロックが実行されないようにする場合に便利です。

たとえば、IsCallerInRole を使用すると、指定した金額 ($1000 など) のトランザクションが、マネージャー ロールのメンバーによってのみ実行されるようにすることができます。 呼び出し元がマネージャーではなく、トランザクションが $1000 を超える場合、トランザクションは実行されず、エラー メッセージが表示されます。

IsCallerInRole にアクセスするには、セキュリティ呼び出しコンテキスト オブジェクトを使用することをお勧めします。この方法でアクセスすると、セキュリティ プロパティを取得するのに、セキュリティ呼び出しコンテキスト オブジェクトへの同じ参照を使用できるためです。 ただし、ObjectContext オブジェクトから IsCallerInRoleメソッドにアクセスすることもできます。 (詳細については、「ObjectContext」または「IObjectContext」を参照してください。)

Microsoft Visual Basic アプリケーションのコンポーネントを開発している場合は、次の例に示すように、GetSecurityCallContext 関数を呼び出し、次に、セキュリティ呼び出しコンテキストを使用して IsCallerInRole を呼び出します。

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

C または C++ アプリケーションを開発している場合は、CoGetCallContext を使用して、ISecurityCallContext インターフェイスへのポインターを取得します。 その後、次の例に示すように、ISecurityCallContext::IsCallerInRole を呼び出します。

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;

セキュリティ呼び出しコンテキスト情報へのアクセス

ロール ベースのセキュリティが有効かどうかの判断

プログラムによるコンポーネント セキュリティ