2012-03-15 24 views
26

He habilitado la autenticación de formulario en mi aplicación web ASP.NET MVC. Quiero permitir el acceso de usuarios anónimos solo a algunas páginas específicas, incluido Register.cshtml, por ejemplo. Pude permitir el acceso a mi archivo CSS desde mi raíz web.config haciendo esto.¿Cómo permitir que un usuario anónimo acceda a una página determinada en MVC?

<location path="Content/Site.css"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 

Ahora quiero permitir el acceso anónimo a otras páginas, como Inicio y Registro. ¿Alguien sabe cómo lograr esto?

Respuesta

43

En MVC normalmente utiliza el atributo [Authorize] para gestionar la autorización. Los controladores o las acciones individuales que están revestidas con ese atributo requerirán que el usuario esté autorizado para acceder a ellas; todas las demás acciones estarán disponibles para los usuarios anónimos.

En otras palabras, un enfoque de lista negra, donde las acciones que requieren autorización están en la lista negra para usuarios anónimos usando [Authorize] - todas las acciones (que no incluyen el atributo) estarán disponibles.

Actualización:

Con MVC4 se ha introducido un nuevo atributo, es decir, el atributo [AllowAnonymous]. Junto con el atributo [Authorize], ahora puede tomar un enfoque de lista blanca en su lugar. El enfoque de lista blanca se logra al vestir todo el controlador con el atributo [Authorize], para forzar la autorización de todas las acciones dentro de ese controlador. A continuación, puede adaptar acciones específicas, que no deberían requerir autorización, con el atributo [AllowAnonymous] y, por lo tanto, hacer una lista blanca de esas acciones únicamente. Con este enfoque, puede estar seguro de que, por accidente, no se olvide de vestir una acción con el [Authorize], dejándola a disposición de todos, aunque no sea así.

su código a continuación, podría ser algo como esto:

[Authorize] 
public class UserController : Controller { 

    [AllowAnonymous] 
    public ActionResult LogIn() { 
     // This action can be accessed by unauthorized users 
    } 

    public ActionResult UserDetails() { 
     // This action can NOT be accessed by unauthorized users 
    } 
} 
+0

: si es así, ¿por qué no puedo ver mi Register.cshtml? cuando solo habilito la autenticación de formulario. – JED

+0

@JED No estoy seguro, probablemente necesite complementar su pregunta con más contexto para poder resolverlo. ¿Obtiene algún error o qué sucede cuando intenta acceder a su vista de registro? –

+0

Creo que sé cuál es el problema. Niego todo acceso de usuario en mi configuración – JED

3

en el web.config que tenía el siguiente autorización

<authorization> 
    <deny users ="?"/> 
</authorization> 

esto hace que el

[AllowAnonymous] 

no funcionar correctamente , tuve que eliminar esa autorización de mi Web.config, y en todos los controladores poner la línea

[Authorize] 

antes de la declaración de la clase, para que funcione correctamente.

+0

¡Gracias, esto es lo único que funcionó para mí! Muchas gracias –

+0

De nada, espero que la información sea útil para más Desarrolladores. –

Cuestiones relacionadas