changeset 180:222362c29416

UI para asignación de roles
author nelopauselli
date Mon, 08 Aug 2011 16:42:52 -0300
parents 1deccd6c3cb2
children 6ee05ceea8c3
files Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs Agendas/trunk/src/Agendas.Web/Controllers/PersonaController.cs Agendas/trunk/src/Agendas.Web/DataProviders.cs Agendas/trunk/src/Agendas.Web/Models/PersonaModel.cs Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Object.cshtml Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Roles.cshtml
diffstat 10 files changed, 54 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs	Mon Aug 08 16:42:52 2011 -0300
@@ -40,15 +40,16 @@
 
 		private static void SetDefaultGroups(Persona persona)
 		{
-			persona.Roles.Add(Roles.Usuario);
-
 #if DEBUG
 			var administradores = new[] {"nelopauselli", "alabras", "jjmoa", "jrowies"};
 #else
 			var administradores = new[] {"alabras", "jrowies", "jorgegamba"};
 #endif
 			if (administradores.Contains(persona.Twitter))
+			{
+				persona.Roles.Add(Roles.Usuario);
 				persona.Roles.Add(Roles.Administrador);
+			}
 		}
 
 		public void AddCuenta(IdentityProviderEnum identityProvider, string username)
@@ -78,7 +79,7 @@
 	        return _personaRepository.Get(id);
 	    }
 
-        public Resultado Add(string nombre, string twitter, string mail, string blog)
+		public Resultado Add(string nombre, string twitter, string mail, string blog, IEnumerable<string> roles)
         {
             var persona = new Persona(nombre) {Twitter = twitter, Mail = mail, Blog = blog};
 
@@ -87,12 +88,21 @@
 
 			SetDefaultGroups(persona);
 
+			if (roles != null)
+			{
+				persona.Roles.Clear();
+				foreach (var rol in roles)
+				{
+					persona.Roles.Add(rol);
+				}
+			}
+
 			_personaRepository.Save(persona);
 
             return new Resultado(true);
         }
 
-		public Resultado Update(Guid id, string nombre, string twitter, string mail, string blog)
+		public Resultado Update(Guid id, string nombre, string twitter, string mail, string blog, IEnumerable<string> roles)
 	    {
 	        var persona = _personaRepository.Get(id);
             if (persona == null)
@@ -106,7 +116,16 @@
 
 			//TODO: ¿que hacemos con la cuenta de twitter asociada?
 
-	        return new Resultado(true);
+			if (roles!=null)
+			{
+				persona.Roles.Clear();
+				foreach (var rol in roles)
+				{
+					persona.Roles.Add(rol);
+				}
+			}
+
+			return new Resultado(true);
 	    }
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs	Mon Aug 08 16:42:52 2011 -0300
@@ -24,7 +24,7 @@
 		{
 			using (_requestEmulator.Invoke())
 			{
-				_personaService.Add("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com");
+				_personaService.Add("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com", null);
 			}
 
 			using (_requestEmulator.Invoke())
@@ -63,7 +63,7 @@
 		{
 			using (_requestEmulator.Invoke())
 			{
-				_personaService.Add("Pablo Morales", "pablomorales", "pablomorales@gmail.com", "http://pablomorales.blogspot.com");
+				_personaService.Add("Pablo Morales", "pablomorales", "pablomorales@gmail.com", "http://pablomorales.blogspot.com", new[]{Roles.Usuario});
 			}
 
 			using (_requestEmulator.Invoke())
--- a/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs	Mon Aug 08 16:42:52 2011 -0300
@@ -66,7 +66,7 @@
             var personaRepository = DefaultPersonaRepository;
 
             var personaService = new PersonaService(personaRepository);
-            var r = personaService.Add("Mariano Pauselli", "marianopauselli", string.Empty, string.Empty);
+			var r = personaService.Add("Mariano Pauselli", "marianopauselli", string.Empty, string.Empty, null);
             Assert.IsTrue(r.Succeful);
 
             var todas = personaService.GetAll();
@@ -81,7 +81,7 @@
             Assert.AreEqual(p1, p2);
             Assert.AreSame(p1, p2);
 
-            personaService.Update(personaId, p1.Nombre, p1.Twitter, "marianopauselli@gmail.com", string.Empty);
+            personaService.Update(personaId, p1.Nombre, p1.Twitter, "marianopauselli@gmail.com", string.Empty,null);
 
             var p3 = personaService.GetById(personaId);
             Assert.IsNotNull(p3);
--- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj	Mon Aug 08 16:42:52 2011 -0300
@@ -233,6 +233,9 @@
   <ItemGroup>
     <Content Include="Views\Shared\SinPermisos.cshtml" />
   </ItemGroup>
+  <ItemGroup>
+    <Content Include="Views\Shared\EditorTemplates\Roles.cshtml" />
+  </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
--- a/Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/PerfilController.cs	Mon Aug 08 16:42:52 2011 -0300
@@ -116,7 +116,7 @@
 				var persona = IdentityContext.GetUsuario();
 
 				var personas = AgendaFactory.GetPersonaService();
-				var r = personas.Update(persona.Id, model.Nombre, model.Twitter, model.EMail, model.Blog);
+				var r = personas.Update(persona.Id, model.Nombre, model.Twitter, model.EMail, model.Blog, null);
 				if (r.Succeful)
 				{
 					this.AddNotification("Los datos fueron guardados");
--- a/Agendas/trunk/src/Agendas.Web/Controllers/PersonaController.cs	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/PersonaController.cs	Mon Aug 08 16:42:52 2011 -0300
@@ -32,7 +32,7 @@
             if (ModelState.IsValid)
             {
                 var personas = AgendaFactory.GetPersonaService();
-                var r = personas.Add(model.Nombre, model.Twitter, model.EMail,model.Blog);
+                var r = personas.Add(model.Nombre, model.Twitter, model.EMail,model.Blog, model.Roles);
                 if (r.Succeful)
                 {
                     this.AddNotification("Los datos fueron guardados");
@@ -62,7 +62,8 @@
         	            		Nombre = persona.Nombre,
         	            		Twitter = persona.Twitter,
         	            		EMail = persona.Mail,
-        	            		Blog = persona.Blog
+        	            		Blog = persona.Blog,
+								Roles = persona.Roles.ToArray()
         	            	};
 
             return View("Defaulteditor", model);
@@ -75,7 +76,7 @@
             if (ModelState.IsValid)
             {
                 var personas = AgendaFactory.GetPersonaService();
-                var r = personas.Update(new Guid(model.Id), model.Nombre, model.Twitter, model.EMail, model.Blog);
+				var r = personas.Update(new Guid(model.Id), model.Nombre, model.Twitter, model.EMail, model.Blog, model.Roles);
                 if (r.Succeful)
                 {
                     this.AddNotification("Los datos fueron guardados");
--- a/Agendas/trunk/src/Agendas.Web/DataProviders.cs	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/DataProviders.cs	Mon Aug 08 16:42:52 2011 -0300
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Web.Mvc;
+using AltNetHispano.Agendas.Domain;
 using AltNetHispano.Agendas.Factories;
 using AltNetHispano.Agendas.Web.Models;
 
@@ -23,5 +24,10 @@
                    select
                        new SelectListItem {Text = p.Nombre, Value = p.Id.ToString(), Selected = p.Id.Equals(id)};
         }
-    }
+
+		public static IEnumerable<string> GetRoles(this HtmlHelper helper)
+		{
+			return new[] {Roles.Administrador, Roles.Usuario};
+		}
+	}
 }
--- a/Agendas/trunk/src/Agendas.Web/Models/PersonaModel.cs	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Models/PersonaModel.cs	Mon Aug 08 16:42:52 2011 -0300
@@ -22,6 +22,8 @@
 
 		[DataType(DataType.Url)]
     	public string Blog { get; set; }
+
+		public string[] Roles { get; set; }
     }
 
     public class PersonaEditModel
@@ -41,6 +43,8 @@
 
 		[DataType(DataType.Url)]
     	public string Blog { get; set; }
+
+		public string[] Roles { get; set; }
     }
 
     public class PersonaDto
--- a/Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Object.cshtml	Mon Aug 08 15:24:26 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Object.cshtml	Mon Aug 08 16:42:52 2011 -0300
@@ -5,7 +5,7 @@
         @ViewData.ModelMetadata.SimpleDisplayText
     }
 } else {
-    foreach (var prop in ViewData.ModelMetadata.Properties.Where(metadata => metadata.ShowForEdit && !metadata.IsComplexType && !ViewData.TemplateInfo.Visited(metadata)))
+    foreach (var prop in ViewData.ModelMetadata.Properties.Where(metadata => metadata.ShowForEdit && !ViewData.TemplateInfo.Visited(metadata)))
 	{
         if (prop.HideSurroundingHtml) {
             @Html.Editor(prop.PropertyName)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Roles.cshtml	Mon Aug 08 16:42:52 2011 -0300
@@ -0,0 +1,6 @@
+@model IList<string>
+@foreach (var item in Html.GetRoles())
+{
+	<input type="checkbox" name="Roles" value="@item" @(Model != null && Model.Contains(item) ? "checked" : string.Empty) />@item
+}
+