Estoy tratando de hacer alguna autorización personalizada, así que creé un controlador que reemplaza el método OnAuthorization
. También apliqué el atributo Authorize
a este controlador. La pregunta es ¿por qué se llama al método OnAuthorization
ANTES del proceso de autenticación de formularios básicos?¿Por qué onAuthorization se ejecuta antes de la autenticación?
Me gustaría autorizar al usuario luego de que se haya autenticado. ¿Me estoy perdiendo algo?
Aquí está el código:
[Authorize]
public class AuthorizationController : Controller
{
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
List<string> allowedControllers = new List<string>() { "SecurityController" };
List<string> allowedActions = new List<string>() { "Index" };
string controllerName = filterContext.Controller.GetType().Name;
string actionName = filterContext.ActionDescriptor.ActionName;
if (!allowedControllers.Contains(controllerName)
|| !allowedActions.Contains(actionName))
{
filterContext.Result = View("UnauthorizedAccess");
}
}
}
El controlador que he probado con algo así como:
public class SecurityController : AuthorizationController
{
public ActionResult Index()
{
return View();
}
public ActionResult AnotherIndex()
{
return View();
}
}
Bueno, no sucede como esperaba. Para el ejemplo anterior, cuando deseo acceder a la acción AnotherIndex, esperaría obtener la página de inicio de sesión, pero obtendré Acceso no autorizado. – misha
Después de su edición: entiendo, pero si anulo el AuthorizeAttribute, no tengo acceso para realizar otras acciones, como redirigir al usuario a una página que le dice que no está autorizado en lugar de no haber iniciado sesión ... – misha
@misha Seguro lo haces. ¿Qué te hace pensar que no puedes? – Dismissile