annotate Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs @ 179:1deccd6c3cb2

Aplicando seguridad x roles en sitio web
author nelopauselli
date Mon, 08 Aug 2011 15:24:26 -0300
parents
children 212c664db5aa
rev   line source
179
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
1 using System;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
2 using System.Collections.Generic;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
3 using System.Linq;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
4 using System.Reflection;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
5 using System.Web.Mvc;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
6 using AltNetHispano.Agendas.Domain;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
7 using AltNetHispano.Agendas.Web.Controllers;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
8 using NUnit.Framework;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
9
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
10 namespace Agendas.Web.Tests
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
11 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
12 [TestFixture]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
13 public class Autorizaciones
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 private IEnumerable<MethodInfo> _methods;
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 [TestFixtureSetUp]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
18 public void ReadMethods()
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 var types = typeof (HomeController).Assembly.GetTypes().ToList();
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
21 var controllers = types.Where(t => typeof (Controller).IsAssignableFrom(t)).ToList();
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 var methods = new List<MethodInfo>();
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
24 foreach (var controller in controllers)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
25 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
26 var temp =
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
27 controller.GetMethods(BindingFlags.Public | BindingFlags.Instance | ~BindingFlags.FlattenHierarchy).Where(
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
28 m => typeof (ActionResult).IsAssignableFrom(m.ReturnType));
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 methods.AddRange(temp);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
31 }
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 _methods = methods;
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 [Test]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
37 public void Acciones_publicas()
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 var acciones = new[]
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 "HomeController.Index", "HomeController.About", "EventoController.Index", "AccountController.LogOn",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
42 "AccountController.LogOff", "AccountController.TwitterLogOn", "HistoricoController.Index",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
43 "PersonaController.Index", "ErrorController.NoAutorizado"
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
44 };
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 #region Asserts
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
47
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
48 bool fail = false;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
49 foreach (var method in _methods)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
50 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
51 var action = method.DeclaringType.Name + "." + method.Name;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
52 if (acciones.Contains(action))
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
53 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
54 if (method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
55 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
56 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
57 Console.WriteLine(action + " debe ser público");
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
58 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
59 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
60 else
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
61 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
62 if (!method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
63 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
64 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
65 Console.WriteLine(action + " debe ser seguro");
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
66 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
67 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
68 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
69
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
70 Assert.IsFalse(fail);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
71
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
72 #endregion
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
73 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
74
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
75 [Test]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
76 public void Acciones_privadas()
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
77 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
78 var acciones = new[]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
79 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
80 "PerfilController.Index", "PerfilController.AddGoogleAccount", "PerfilController.AddTwitterAccount",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
81 "PerfilController.Remove", "PerfilController.Modificar"
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
82 };
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
83
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
84 VerficarAccionesSeguras(acciones, Roles.Usuario, "debe ser privado");
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
85 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
86
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
87 [Test]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
88 public void Acciones_del_administrador()
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
89 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
90 var acciones = new[]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
91 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
92 "EventoController.Agendar", "EventoController.Confirmar", "EventoController.Nuevo",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
93 "EventoController.Publicar", "EventoController.Modificar", "EventoController.Proponer",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
94 "EventoController.Cancelar", "EventoController.Descartar", "EventoController.ReAgendar",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
95 "EventoController.ReProponer", "PersonaController.Nueva", "PersonaController.Modificar"
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
96 };
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
97
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
98 VerficarAccionesSeguras(acciones, Roles.Administrador, "debe ser de uso exclusivo de los administradores");
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
99 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
100
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
101 private void VerficarAccionesSeguras(IEnumerable<string> acciones, string rol, string mensaje)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
102 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
103 bool fail = false;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
104 foreach (var method in _methods)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
105 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
106 var action = method.DeclaringType.Name + "." + method.Name;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
107 if (acciones.Contains(action))
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
108 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
109 if (method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
110 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
111 var found =
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
112 method.GetCustomAttributesData().Any(d => d.NamedArguments.Any(a => rol.Equals(a.TypedValue.Value)));
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
113
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
114 if (!found)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
115 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
116 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
117 Console.WriteLine(action + " " + mensaje);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
118 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
119 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
120 else
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
121 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
122 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
123 Console.WriteLine(action + " debe ser seguro");
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
124 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
125 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
126 else if (method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
127 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
128 var found =
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
129 method.GetCustomAttributesData().Any(d => d.NamedArguments.Any(a => rol.Equals(a.TypedValue.Value)));
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
130
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
131 if (found)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
132 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
133 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
134 Console.WriteLine(action + " no " + mensaje);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
135 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
136 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
137 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
138 Assert.IsFalse(fail);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
139 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
140 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
141 }