annotate Agendas/trunk/src/Agendas.Web/Controllers/CustomAuthorizeAttribute.cs @ 179:1deccd6c3cb2

Aplicando seguridad x roles en sitio web
author nelopauselli
date Mon, 08 Aug 2011 15:24:26 -0300
parents
children 2d02adb79322
rev   line source
179
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
1 using System.Net;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
2 using System.Web;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
3 using System.Web.Mvc;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
4 using AltNetHispano.Agendas.Domain;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
5 using AltNetHispano.Agendas.Factories;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
6
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
7 namespace AltNetHispano.Agendas.Web.Controllers
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
8 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
9 public class CustomAuthorizeAttribute : AuthorizeAttribute
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
10 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
11 public string RedirectResultUrl { get; set; }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
12
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
13 public CustomAuthorizeAttribute()
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
14 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
15 RedirectResultUrl = "~/Error/NoAutorizado";
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
16 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
17
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
18 protected override bool AuthorizeCore(HttpContextBase httpContext)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
19 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
20 if (!httpContext.User.Identity.IsAuthenticated || !IdentityContext.IsAuthenticated())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
21 return false;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
22
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
23 if (!string.IsNullOrWhiteSpace(Roles))
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
24 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
25 using (NHibernateFactory.GetSessionScope())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
26 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
27 var roles = Roles.Split(',');
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
28 if (!IdentityContext.IsInRole(roles))
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
29 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
30 httpContext.Response.StatusCode = 403;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
31 return false;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
32 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
33 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
34 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
35
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
36 return true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
37 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
38
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
39 protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
40 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
41 if (filterContext.HttpContext.Response.StatusCode == 403)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
42 filterContext.Result = new RedirectResult(RedirectResultUrl);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
43 else
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
44 base.HandleUnauthorizedRequest(filterContext);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
45 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
46 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
47 }