Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к файловй системе от пользователя 
:(
    Опции темы
Cristoff
Дата 1.4.2013, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 1.4.2008

Репутация: нет
Всего: нет



Добрый день.
Подскажите, как можно решить следующую траблу:
Есть сервер IIS 7.5, на нем крутится сайт c MVC3 Razor. Включена Windows аутентификация и разрешен анонимный вход. 
Код контроллера:
Код

 [Authorize]
        public FileDownloadResult Download(string file)
        {

            
            
             if (User.Identity.IsAuthenticated)
            {
                try
                {

                    var fileData = GetFileData(file);
                    return new FileDownloadResult(file, fileData);
                }
                catch (FileNotFoundException)
                {
                    throw new HttpException(404, string.Format("The file {0} was not found.", file));
                }
            }
            else
                throw new HttpException(500, string.Format("The file {0} was not found.", file));
        }

        [AllowCrossSiteJson]
        public ActionResult Check(string file)
        {

            string filePath = Request.MapPath("~/Content/Files/" + GetTruePathFile(file));
            if (System.IO.File.Exists(filePath))
            {

                // HttpContext.Response.Status = "200";
            }
            else
            {
                return new HttpNotFoundResult();
            }
            return Content("<html></html>");
        }

        private string GetTruePathFile(string filepath)
        {
            string file = filepath;
            if (file.IndexOf("$") >= 0)
            {
                file = file.Replace("$", @"/");
            }
            if (file.IndexOf("..") >= 0)
            {
                file = file.Replace("..", "");
            }
            return file;
        }

        private byte[] GetFileData(string file)
        {
            file = GetTruePathFile(file);
            byte[] fileData = null;
            WindowsIdentity id = (WindowsIdentity) User.Identity;
           
            using (System.Security.Principal.WindowsImpersonationContext context = id.Impersonate())
            {
                try
                {
                    fileData = file.GetFileData(Server.MapPath("~/Content/Files/"));
                }
                catch (Exception)
                {

                    throw;
                }
              
                context.Undo();
            }
            return fileData;
        }
    }

    public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
            base.OnActionExecuting(filterContext);
        }
    }


Прописаны роуты:
Код

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute("Download", "Files/Download/{file}",
                new { controller = "Files", action = "Download", file = "" }
            );
            routes.MapRoute("Check", "Files/Check/{file}",
                new { controller = "Files", action = "Check", file = "" }
            );
            routes.MapRoute("Default", "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );



Теперь по-порядку: 
Действие Check - используется для анонимной проверки наличия файла. 
Download - используется для скачивания файла с авторизацией.

Так вот, я хотел организовать проверку на доступ к определенному файлу на том же сервере с помощью возможностей NTFS.

Ограничил к папке доступ всем кроме себя и файл от другого юзера все равно качается...

Кусок из web.config
Код

    <authentication mode="Windows" />
      <authorization>
        <allow users="*" />
      </authorization>
    <identity impersonate="true" />

Как можно еще решить эту задачу?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ASP | Следующая тема »


 




[ Время генерации скрипта: 0.1193 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.