2012-02-16 5 views
0

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

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

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

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

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

спасибо.

ответ

0

можно получить более или менее один и тот же результат, как написание 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

Мгновенный обработчик - это не такая уж большая проблема, как вы думаете. Обработчик - это просто объект определенного класса. Сотни объектов создаются для каждого запроса. Это не проблема. – galets

0

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

More info about HttpModules.

+0

Возможно ли настроить модуль для определенной папки, чтобы он не выполнялся для абсолютно каждого запроса? – user1213926

Смежные вопросы