ASP.NET Custom модуль авторизации для скачивания файлов - PullRequest
0 голосов
/ 16 февраля 2012

В приложении ASP.NET 3.5 у меня есть следующий сценарий:

Пользователи могут создавать папки, в которые они могут загружать файлы. Файлы хранятся в файловой системе сервера и затем могут быть загружены путем запроса URL-адресов в формате:

имя хоста / UsersFolders / User1 / Folder1 / requested_file_name.jpeg

Проблема в том, что я хочу, чтобы только Пользователь1 и другие пользователи, которым Пользователь1 предоставил доступ, могли загружать файлы, расположенные в Папка1 и не любой другой пользователь.

Я уже реализовал бизнес-логику для отношения n - n между пользователями и папками, и теперь я просто пытаюсь авторизовать запросы к файлам, расположенным в папке с именем UsersFolders , и предоставить или запретить доступ в зависимости от того, какой пользователь запрашивает какую папку. Какой лучший способ сделать это?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

Я могу получить более или менее тот же результат, что и при написании HttpModule , просто проверив URL для каждого запроса в global.asax во время Authenticate_Request события. Поскольку HttpModules создаются для каждого запроса , недостатком этого подхода является тот факт, что мне приходится вызывать метод авторизации для абсолютно каждого входящего запроса в мое приложение, независимо от того, является ли запрашиваемый ресурс общедоступным (например, . .js / .css файлы) или нет.

Я считаю лучшим подходом написать HttpHandler с именем, например, MyHttpHandler и поместить соответствующий файл конфигурации в папку UsersFolders , как описано ниже:

<system.web>
  <httpHandlers>
    <add  verb="GET" path="*" type="MyHttpHandler" />
  </httpHandlers>
</system.web>

Таким образом, экземпляр обработчика создается только при запросе файла из UsersFolder .

0 голосов
/ 16 февраля 2012

Я бы, наверное, написал HTTPModule, как этот , проверил входящий запрос.Если запрос URL адресован дочернему элементу «UsersFolder», сравните учетные данные аутентифицированного пользователя с запрошенной папкой пользователя.Если у них нет доступа, верните код ошибки HTTP 401.

Подробнее о HttpModules .

...