Программно определить, ограничен ли путь - PullRequest
1 голос
/ 08 сентября 2011

Я создаю HttpModule в ASP.NET 2. Модуль должен выполнять другую логику в зависимости от того, является ли запрошенный путь открытым или защищенным.Web.config устанавливает авторизацию с помощью тега <system.web><authorization> и нескольких тегов <location>.

Есть ли способ для модуля Http выяснить, защищен ли путь текущего запроса или нет?Я не хочу жестко кодировать значения в коде.

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

Если вы используете стандарт authentication/authorization, тогда вы можете использовать CheckUrlAccessForPrincipal .

UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb);
1 голос
/ 08 сентября 2011

Нет прямого способа посмотреть на запись файловой системы и получить ваши действующие разрешения на нее.А вычисление эффективного набора разрешений для файла или каталога ... сложно (это было бы вежливым способом).

Похоже, это было бы довольно очевидной частью информации о том, что System.IOклассы должны обеспечить, но команда CLR, очевидно, так не думала.Я думаю, что частью проблемы является неотъемлемое состояние гонки.Права доступа к данному объекту являются динамическими и могут измениться в любое время.Они могут даже изменить вашу проверку разрешений и фактический доступ к объекту, что приведет к возникновению исключения.

Эти вопросы имеют некоторую помощь:

Самый простой способ - это потребоватьразрешения, которые вы хотите, поймайте исключение, если у вас их нет, и используйте его для возврата значения bool yes / no:

// you'll need access to the namespace namespace System.Security.Permissions
public bool HasAccess( string path , FileIOPermissionAccess accessDesired )
{
  bool isGranted ;

  try
  {
    FileIOPermission permission = new FileIOPermission( accessDesired , path ) ;

    permission.Demand() ;

    isGranted = true ;

  }
  catch
  {
    isGranted = false ;
  }

  return isGranted ;
}
...