2012-05-29 26 views
5

Tengo algunos archivos en mi carpeta de contenido que no deseo que un usuario pueda descargar sin autorización. ¿Cómo evito que un usuario llegue al archivo escribiendo ... Content/{filename} en la barra de direcciones?Protección de carpetas en MVC

Respuesta

3

Hay un par de posibilidades. La primera de ellas consiste en el uso de la etiqueta <location> en su web.config:

<location path="Content"> 
    <system.web> 
     <authorization> 
      <deny users="?" /> 
     </authorization> 
    </system.web> 
</location> 

Otra posibilidad es poner esos archivos dentro de una carpeta en la que nadie puede acceder (como la carpeta App_Data por ejemplo) y luego tener una acción de controlador que servirá aquellos archivos que se decorarán con el atributo [Authorize].

+0

¿Dónde esta se encuentra en la web. config? – user517406

+0

Dentro del elemento '' y fuera de ''. Está en la raíz. –

+1

Bien, gracias, ¿no funcionó de inmediato como debería ser no :) – user517406

0

Bueno, una manera es tener fuera del contexto de IIS, así que en vez de tenerlos bajo C:\inetpub\wwwroot

cambio a algo así como C:\temp\files.

en su base de datos tienen un GUID asociado con el nombre del documento y usan el GUID para mostrar el enlace al archivo.

en su acción de controlador, usted simplemente aceptaría el GUID, obtendrá el nombre del archivo y luego servirá el archivo en su respuesta.

1

no funciona para mí.

<configuration> 
    <appSettings> 
    ... 
    </appSettings> 
    <system.web> 
    ... 
    </system.web> 
    <system.webServer> 
    ... 
    </system.webServer> 
    <location path="Content"> 
     <system.web> 
      <authorization> 
       <deny users="?" /> 
      </authorization> 
     </system.web> 
    </location> 
</configuration> 

Paso los MVC 4.0 aplicación, inicio de sesión y cierre de sesión, no se puede acceder a cualquier página de la aplicación, pero todavía se puede acceder al archivo de enlace directo como

http://localhost:80966/Content/Files/home.jpg