2008-12-04 14 views
5

Aquí está una descripción sencilla de mi estructura de directorios de mis puntos de vista:Permitir el acceso a páginas específicas con ASP-MVC y la autenticación de formularios

Proyecto

  • Página 1
  • Página 2
  • RSS

Problemas

  • Página 1
  • Página 2
  • RSS

estoy usando la autenticación de formularios para denegar el acceso a todos los usuarios no autenticados, que trabaja muy bien. Sin embargo, quiero poder otorgar acceso a las vistas RSS a todos (para que puedan suscribirse a través de Google Reader y esas cosas)

Entiendo que puede otorgar acceso a las páginas agregando la siguiente página a su web.config

<location path="TOURPAGE.aspx"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    <allow users="?" /> 
    </authorization> 
</system.web> 

Sin embargo, ¿cómo podría hacer esto con mi hecho dinámicamente el URL de, por ejemplo:

Issues/RSS/chrisj 
  • Ese camino se asigna a un controlador en cuestiones llamada RSS, que tiene un nombre de usuario y escupe una fuente de problemas emabrgo ...

EDITAR

Algunas respuestas pensé que habían arreglado, pero :

Parece que, en mi caso al menos, todavía necesita la cookie de autenticación para ver la página. Puede cerrar la sesión y verla, siempre que tenga la cookie.

Eso no es bueno para mí, necesito que la página sea completamente pública, ya que es una fuente RSS.

Respuesta

3

Olvídese de la ubicación <> < allow /> < deny /> cosas ... parece que necesita usar el atributo [Autorizar] en sus acciones.

Consultar estas páginas para obtener más información: http://www.asp.net/learn/mvc/tutorial-17-cs.aspx http://www.pnpguidance.net/post/ASPNETMVCFrameworkPreview4HandleErrorAuthorizeOutputCacheActionFilterAttributes.aspx

Además, el atributo puede aplicarse a nivel del controlador, así, por lo que no tiene que ponerlo en cada acción individual.

3

Esto fue en realidad mucho más simple de lo que pensaba. Parece .net es bastante intuitivo, He intentado lo siguiente:

<location path="Issues/RSS"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    <allow users="?" /> 
    </authorization> 
</system.web> 

y funcionó :)

+0

grr, me ganaste :) –

1
<location path="/Issues/RSS/"> 
<system.web> 
<authorization> 
<allow users="*" /> 
</authorization> 
</system.web> 
</location> 

EDIT: La razón por la que esto funciona por cierto, es porque es .NET suponiendo que la URL va a un directorio, y esta etiqueta de ubicación anterior dice "cualquier cosa en el directorio 'Issues/RSS' es seguro :)

+0

Tiene una respuesta correcta de todos modos: p – qui

+0

Esto no funciona para mí, ya que se queja de que no puede terminar o comenzar con un "/". "~/Issues" funciona, pero no "/ Issues" o "~/Issues /". –

0

Esto podría no funcionar como se esperaba.

Parece que, en mi caso al menos, todavía necesita la cookie de autenticación para ver la página.Puede cerrar la sesión y verla, siempre que tenga la cookie.

Eso no es bueno para mí, necesito que la página sea completamente pública, ya que es una fuente RSS.

0

Estoy de acuerdo con Charlino en que la etiqueta [Autorizar] probablemente resuelva su problema.

Si está utilizando una única acción de controlador tanto para RSS como para una página (y solo están renderizando un ActionResult diferente basado en algún parámetro), puede verificar si el usuario está autenticado con HttpContext.Current.User.Identity.IsAuthenticated y usarlo dentro de la acción del controlador para decidir si continuar o no & permitir el acceso.

Cuestiones relacionadas