view Agendas/trunk/src/Agendas.Web/Controllers/CustomAuthorizeAttribute.cs @ 286:a8f7c41e3b47

#196: Patrocinadores, en el histórico de eventos.
author juanjose.montesdeocaarbos
date Mon, 02 Jan 2012 15:51:19 -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);
		}
	}
}