c# - ¿Desea omitir o desactivar[Autorizar(roles=“”)] durante el desarrollo?
asp.net-mvc asp.net-mvc-3 (3)
Para la API web:
public class MyAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext actionContext)
{
return actionContext.Request.RequestUri.IsLoopback || base.IsAuthorized(actionContext);
}
}
Construyendo una aplicación MVC3, y TPTB quiere que usemos su proveedor de autorización personalizado. Sin embargo, durante el desarrollo, este proveedor de autenticación es una molestia, ya que dará un error hasta que cierre / reinicie el navegador, o requerirá que vuelva a iniciar sesión en cada compilación.
Por ahora, acabo de agregar <authentication mode="None"/>
al web.config, que funciona bien hasta que encuentro una acción o un controlador que usa el filtro [Authorize(Roles = "Admin")]
(puede ser cualquiera rol, no solo administrador). Cuando llega a uno de esos, simplemente muestra una página en blanco.
¿Hay alguna forma global y temporalmente de desactivar estos filtros? ¿O simplemente le da al usuario todos los roles mientras estoy en desarrollo?
EDITAR
Permítanme aclarar: en realidad estoy transfiriendo una aplicación grande de MVC2 a MVC3. Tiene un montón de [Authorize(Roles="Admin")]
y [Authorize(Roles="Admin,Editor")]
largo de él. Prefiero no cambiar todos esos si es posible.
¿Debo crear un pequeño proveedor de roles personalizados que asigne todos los roles automáticamente?
Puede escribir un filtro Autorizar personalizado que no realice ninguna comprobación si la solicitud proviene de localhost
:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext.Request.Url.IsLoopback)
{
// It was a local request => authorize the guy
return true;
}
return base.AuthorizeCore(httpContext);
}
}
Puede heredar de AuthorizeAttribute
y realizar realizaciones separadas con la directiva #if DEBUG
.
public class MyAuthorizeAttribute: AuthorizeAttribute
{
#if DEBUG
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return true;
}
#endif
}
O bien #define YOUR_OWN_FLAG
para activar y desactivar el comportamiento en cualquier compilación, depuración o lanzamiento.