annotate Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs @ 219:b9850b647a4e

Agregando alta de ponente durante la carga del evento
author nelopauselli
date Thu, 08 Sep 2011 11:22:10 -0300
parents a36a76bd6ec3
children 52fe43e36f5f
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",
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",
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
95 "EventoController.ReProponer", "PersonaController.Nueva", "PersonaController.Modificar",
219
b9850b647a4e Agregando alta de ponente durante la carga del evento
nelopauselli
parents: 209
diff changeset
96 "PersonaController.Quitar", "PersonaApiController.Nueva"
179
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
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
99 VerficarAccionesSeguras(acciones, Roles.Administrador, "debe ser de uso exclusivo de los administradores");
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 private void VerficarAccionesSeguras(IEnumerable<string> acciones, string rol, string mensaje)
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 bool fail = false;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
105 foreach (var method in _methods)
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 var action = method.DeclaringType.Name + "." + method.Name;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
108 if (acciones.Contains(action))
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 if (method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
111 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
112 var found =
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
113 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
114
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
115 if (!found)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
116 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
117 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
118 Console.WriteLine(action + " " + mensaje);
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 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
121 else
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 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
124 Console.WriteLine(action + " debe ser seguro");
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 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
127 else if (method.GetCustomAttributes(typeof (CustomAuthorizeAttribute), false).Any())
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 var found =
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
130 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
131
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
132 if (found)
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
133 {
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
134 fail = true;
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
135 Console.WriteLine(action + " no " + mensaje);
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 }
1deccd6c3cb2 Aplicando seguridad x roles en sitio web
nelopauselli
parents:
diff changeset
139 Assert.IsFalse(fail);
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 }