Поделиться через


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

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

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

Предпочтительный способ доступа к 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;

Доступ к информации о контексте вызова безопасности

Определение того, включена ли Role-Based безопасность

Программная безопасность компонентов