annotate Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs @ 302:11dddcc9a862 tip

Historico de Eventos, no muestra bien la Url del Patrocinador.
author juanjose.montesdeocaarbos
date Tue, 14 Aug 2012 21:54:30 -0300
parents 1408ac17cb64
children
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(
183
212c664db5aa Generalización del manejo de las acciones sobre eventos
nelopauselli
parents: 179
diff changeset
28 m => !m.IsPrivate && typeof (ActionResult).IsAssignableFrom(m.ReturnType));
179
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",
275
bf993f99cee3 Ticket #123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents: 258
diff changeset
43 "PersonaController.Index", "ErrorController.NoAutorizado", "PersonaController.Ver",
292
1408ac17cb64 Patrocinadores: Faltaba aplicar seguridad a la Api de Patrocinadores.
juanjose.montesdeocaarbos
parents: 285
diff changeset
44 "PatrocinadorController.Index", "PatrocinadorController.GetLogo"
179
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 #region Asserts
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
48
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
49 bool fail = false;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
50 foreach (var method in _methods)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
51 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
52 var action = method.DeclaringType.Name + "." + method.Name;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
53 if (acciones.Contains(action))
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
54 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
55 if (method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
56 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
57 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
58 Console.WriteLine(action + " debe ser público");
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 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
61 else
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
62 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
63 if (!method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
64 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
65 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
66 Console.WriteLine(action + " debe ser seguro");
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
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
71 Assert.IsFalse(fail);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
72
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
73 #endregion
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
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
76 [Test]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
77 public void Acciones_privadas()
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
78 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
79 var acciones = new[]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
80 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
81 "PerfilController.Index", "PerfilController.AddGoogleAccount", "PerfilController.AddTwitterAccount",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
82 "PerfilController.Remove", "PerfilController.Modificar"
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
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
85 VerficarAccionesSeguras(acciones, Roles.Usuario, "debe ser privado");
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
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
88 [Test]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
89 public void Acciones_del_administrador()
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
90 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
91 var acciones = new[]
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
92 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
93 "EventoController.Agendar", "EventoController.Confirmar", "EventoController.Nuevo",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
94 "EventoController.Publicar", "EventoController.Modificar", "EventoController.Proponer",
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
95 "EventoController.Cancelar", "EventoController.Descartar", "EventoController.ReAgendar",
209
a36a76bd6ec3 Se soluciona ticket 173. Se agrega eliminación de personas siempre y cuando no esté asociada a ninguna van.
alabra
parents: 183
diff changeset
96 "EventoController.ReProponer", "PersonaController.Nueva", "PersonaController.Modificar",
292
1408ac17cb64 Patrocinadores: Faltaba aplicar seguridad a la Api de Patrocinadores.
juanjose.montesdeocaarbos
parents: 285
diff changeset
97 "PersonaController.Quitar", "PersonaApiController.Nueva", "PatrocinadorController.Nuevo",
1408ac17cb64 Patrocinadores: Faltaba aplicar seguridad a la Api de Patrocinadores.
juanjose.montesdeocaarbos
parents: 285
diff changeset
98 "PatrocinadorController.Modificar", "PatrocinadorController.Eliminar",
1408ac17cb64 Patrocinadores: Faltaba aplicar seguridad a la Api de Patrocinadores.
juanjose.montesdeocaarbos
parents: 285
diff changeset
99 "PatrocinadorApiController.Nuevo"
179
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
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
102 VerficarAccionesSeguras(acciones, Roles.Administrador, "debe ser de uso exclusivo de los administradores");
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
103 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
104
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
105 private void VerficarAccionesSeguras(IEnumerable<string> acciones, string rol, string mensaje)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
106 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
107 bool fail = false;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
108 foreach (var method in _methods)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
109 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
110 var action = method.DeclaringType.Name + "." + method.Name;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
111 if (acciones.Contains(action))
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
112 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
113 if (method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
114 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
115 var found =
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
116 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
117
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
118 if (!found)
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 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
121 Console.WriteLine(action + " " + mensaje);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
122 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
123 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
124 else
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 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
127 Console.WriteLine(action + " debe ser seguro");
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
128 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
129 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
130 else if (method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
131 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
132 var found =
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
133 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
134
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
135 if (found)
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 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
138 Console.WriteLine(action + " no " + mensaje);
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 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
142 Assert.IsFalse(fail);
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
143 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
144 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
145 }