ロール メンバシップの確認
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;
関連トピック