Проверка членства в роли

Можно вызвать метод ISecurityCallContext::IsCallerInRole , чтобы определить, является ли прямой вызывающий объект членом определенной роли. Эта функция полезна, если вы хотите убедиться, что определенный блок кода не выполняется, если вызывающий объект не является членом определенной роли.

Например, можно использовать IsCallerInRole , чтобы убедиться, что транзакции по указанной сумме, например $1000, выполняются только членами роли "Менеджеры". Если вызывающий объект не является диспетчером, а транзакция превышает $1000, транзакция не выполняется и отображается сообщение об ошибке.

Предпочтительным способом доступа к IsCallerInRole является объект контекста вызова безопасности, так как для получения свойств безопасности можно использовать ту же ссылку на объект контекста вызова безопасности. Однако вы также можете получить доступ к методу IsCallerInRoleиз объекта ObjectContext . (См. раздел 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;

Доступ к сведениям о контексте вызова безопасности

Определение включения безопасности на основе ролей

Безопасность программных компонентов