view Agendas/trunk/src/Agendas.Web/Controllers/CustomAuthorizeAttribute.cs @ 284:79942e030118

#123: Patrocinadores de las vans: Se verifica que para publicar una Van, debe tener al menos un Patrocinador.
author juanjose.montesdeocaarbos
date Wed, 28 Dec 2011 09:35:27 -0300
parents 2d02adb79322
children
line wrap: on
line source

using System.Web;
using System.Web.Mvc;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Factories;

namespace AltNetHispano.Agendas.Web.Controllers
{
	public class CustomAuthorizeAttribute : AuthorizeAttribute
	{
		public string RedirectResultUrl { get; set; }

		public CustomAuthorizeAttribute()
		{
			RedirectResultUrl = "~/Error/NoAutorizado";
		}

		protected override bool AuthorizeCore(HttpContextBase httpContext)
		{
			if (!httpContext.User.Identity.IsAuthenticated || !IdentityContext.IsAuthenticated())
				return false;

			if (!string.IsNullOrWhiteSpace(Roles))
			{
				using (NHibernateFactory.GetSessionScope())
				{
					var roles = Roles.Split(',');
					if (!IdentityContext.IsInRole(roles))
					{
						httpContext.Response.StatusCode = 403;
						return false;
					}
				}
			}

			return true;
		}

		protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
		{
			if (filterContext.HttpContext.Response.StatusCode == 403)
				filterContext.Result = new RedirectResult(RedirectResultUrl);
			else
				base.HandleUnauthorizedRequest(filterContext);
		}
	}
}