2015-11-13 4 views
0

У меня есть эта небольшая служба экстранета, где пользователи могут войти в систему, получить всю информацию и загрузить несколько файлов.asp.net MVC защищенная корневая папка только для авторизованных пользователей

Возможно ли защитить корневую папку в проекте MVC asp.net? У меня есть проект, в котором пользователи должны войти в систему, прежде чем использовать какой-либо материал. Как правило, если я использую, например, папку «/ material» для каждого файла pdf, jpg и т. Д., Другие неавторизованные пользователи также могут видеть эти файлы.

Например, каждый может видеть этот файл, если они печатают www.example.com/material/pdf-file.pdf Поэтому я хочу, чтобы только зарегистрированные пользователи могли видеть этот файл. Это возможно?

ответ

0

Это можно сделать, но есть много способов сделать это.

упрощенный сценарий может быть:

  • Disable directory listing on IIS
  • Создание пользовательских «загрузить оболочку» контроллер + действие с целью обслуживания этих файлов.
  • Затем, где бы вы ни создали ссылки для Action, сгенерируйте их с помощью HtmlHelper, который перенаправляет клиент на действие «оболочки». Вы можете передать имя файла в параметре.
  • На контроллере «обертки» вы можете использовать атрибут [Authorize] или еще лучше, без использования таких атрибутов везде, где вы можете использовать FluentSecurity для обработки авторизации.

После создания "обертку" контроллер вашего URL для получения файла может выглядеть следующим образом:

www.example.com/ скачать/файл /pdf-file.pdf

Этот пример предполагает URLконтроллер имя «скачать» и Дейс n имя - это файл.

2

Мне удалось заставить его работать. Вот как я это сделал.

Сначала я добавил эту строку в файл Web.config:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 

Это позволяет точечные символы в формате .pdf, .png и т.д ... в URL.

Я добавил к RouteConfig.cs новую маршрутизацию для контроллера.

routes.MapRoute(
      name: "Material", 
      url: "Material/Download/{file}", 
      defaults: new { controller = "Material", action = "Download", file = UrlParameter.Optional } 
     ); 

Я создал новый контроллер «Материал».

// GET: Material 
    [Authorize] 
    public ActionResult Download(string file) 
    { 
     string path = Server.MapPath(String.Format("~/App_Data/Material/{0}", file)); 

     if(System.IO.File.Exists(path)) 
     { 
      string mime = MimeMapping.GetMimeMapping(path); 

      return File(path, mime); 
     } 

     return HttpNotFound(); 
    } 

А также перенесенная папка материала внутри app_data.

Это похоже на работу. Только авторизованные пользователи могут получить доступ к папке с материалами.

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