/// <summary> /// Tomamos un Usuario, cambiamos la Persona asociada al mismo, algunas propiedades escalares, eliminamos un perfil /// y agregamos otro. Tambien modificamos la contraseƱa /// Luego de probar este metodo se puede acceder a la app principal y ver que pasa, obviamente ingresando con la /// nueva password /// [[IMPORTANTE]] /// Antes de probar este metodo, asegurarse de haber llamado a CrearUsuarioCompleto() /// </summary> public static void CambiarCompleto() { SecurityServices serv = new SecurityServices(); Usuario user; user = serv.GetUsuarioFromLogin("lsimpson"); var perfiles = from p in DB.Contexto.Perfiles where p.ID == 4 select p; user.Perfiles.RemoveWhere(perf => perf.ID == 2); user.Perfiles.Add(perfiles.Single()); Persona nuevaPersona; // primero chequeamos que la Persona no exista, si no existe la creamos nuevaPersona = (from per in DB.Contexto.Personas where per.Apellido == "Olsen" && per.Nombre == "Mona Penelope" select per).SingleOrDefault(); if (nuevaPersona == null) nuevaPersona = CrearPersonaInternal("Mona Penelope", "Olsen", "*****@*****.**", 78); user.Persona = nuevaPersona; user.EnforceExpiration = true; user.FechaExpiracionPassword = DateTime.Now.AddDays(120); serv.UpdateUsuario(user, "123-lisa"); }
public ActionResult Login(string txtLogin, string txtPassword) { SecurityServices serv = new SecurityServices(); Usuario user; ActionResult result = new EmptyResult(); try { user = serv.Login(txtLogin, txtPassword); if (user != null) { // Opcion 1: terminamos aca y no pedimos perfil // result = View("LoginOK", user); // TODO acomodar autenticacion para que no se repita el codigo // Opcion 2: redirigimos a otra vista que nos permite elegir el perfil (salvo que tenga un unico perfil...) if (user.Perfiles.Count > 1) { result = View("PerfilSelect", user); } else { // Guardamos los datos de sesion en el "contexto" de la sesion establecida (similar al Context que usamos en WPF) // Session["SESION_USER"] = serv.CrearSesion(user, user.Perfiles.Single()); FormsAuthentication.SetAuthCookie(user.Login, false); string redirectUrl = FormsAuthentication.GetRedirectUrl(user.Login, false); if (redirectUrl == "/" || string.IsNullOrEmpty(redirectUrl)) { // creamos una nueva vista strong-typed para incorporar la Sesion result = View("LoginOK_v2", Session["SESION_USER"] as Sesion); } else { result = new RedirectResult(redirectUrl); } } } else { // TODO: armar paginas de error para los casos de credenciales incorrectas o excepcion // TODO: y un controlador que ademas realice el log del problema? // result = new HttpUnauthorizedResult("Credenciales incorrectas"); } } catch (Exception ex) { // redireccionar a una pagina de error!! result = new HttpUnauthorizedResult("Estas al horno!!!"); } return result; }
/// <summary> /// /// </summary> /// <param name="cbPerfiles">Valor option del elemento actualmente seleccionado en el dropdown</param> /// <param name="login">Argumento adicional que se obtiene desde el modelo y se vuelve a pasar al controlador /// Otra posibilidad seria incluirlo en un campo hidden /// </param> /// <returns></returns> public ActionResult SelectPerfil(string cbPerfiles, string login) { SecurityServices serv = new SecurityServices(); Usuario user = serv.GetUsuarioFromLogin(login); Perfil perfilElegido; Sesion newSesion; perfilElegido = user.Perfiles.Where(pf => pf.Nombre == cbPerfiles).Single(); Session["SESION_USER"] = newSesion = serv.CrearSesion(user, perfilElegido); return View("LoginOK_v2", newSesion); }
/// <summary> /// Tomamos un Usuario, borramos los perfiles que tiene y agregamos los que no tenia /// Visualizar en SQL Profiler: se veran las dos instrucciones delete y los 2 insert en Usuarios_Perfiles /// [[IMPORTANTE]] /// Antes de probar este metodo, asegurarse de haber llamado a CrearUsuarioCompleto() ya que ahi es donde /// colocamos los perfiles /// </summary> public static void CambiarSoloPerfiles() { SecurityServices serv = new SecurityServices(); Usuario user; // Seguramente no se hace un viaje a la DB, este objeto ya esta en memoria local... user = serv.GetUsuarioFromLogin("lsimpson"); var perfiles = from p in DB.Contexto.Perfiles where p.ID == 1 || p.ID == 4 select p; user.Perfiles.Clear(); user.Perfiles.UnionWith(perfiles); serv.UpdateUsuario(user); }
public LoginViewModel(Action<ActionRequest> notify) { _notify = notify ?? delegate(ActionRequest r) { }; ComandoIngresar = new ComandoSimple(() => { Debug.WriteLine("Llamar a Login Usuario {0} , Pass: {1}", Login, Password); SecurityServices srv = new SecurityServices(); try { if ((Usuario = srv.Login(Login, Password)) != null) { Perfiles = new ObservableCollection<Perfil>(Usuario.Perfiles); PerfilSeleccionado = Perfiles[0]; _notify(ActionRequest.CloseOK); } } catch (OMBSecurityException ex) { OnLoginError(ex.Message); } }, IsValid); ComandoIngresarPerfil = new ComandoSimple(() => { SecurityServices srv = new SecurityServices(); srv.CrearSesion(Usuario, PerfilSeleccionado); Debug.WriteLine("Perfil Seleccionado: {0}", (object)_perfil.Descripcion); _notify(ActionRequest.CloseOK); }); ComandoCancelar = new ComandoSimple(() => _notify(ActionRequest.CloseCancel)); PerfilSeleccionado = null; }
public static void CrearUsuarioCompleto() { SecurityServices serv = new SecurityServices(); Usuario user; Console.WriteLine("Eliminando posible usuario remanente lsimpson"); // Me aseguro que el usuario no exista, solo para fines de prueba, no es un metodo que deba existir en la realidad serv.EliminarUsuario("lsimpson"); // Creo Persona, Usuario y le asigno al menos un Perfil porque de otra manera la validacion en SecurityServices // fallaria // primero chequeamos que la Persona no exista, si no existe la creamos Persona persona ; Console.WriteLine("Chequeando si existe Persona para Lista Simpson"); persona = (from per in DB.Contexto.Personas where per.Apellido == "Simpson" && per.Nombre == "Lisa" select per).SingleOrDefault(); if (persona == null) { Console.WriteLine("Creando Persona Lisa Simpson"); persona = CrearPersonaInternal("Lisa", "Simpson", "*****@*****.**", 8); } Console.WriteLine("Creando Usuario a partir de Persona"); user = CrearUsuarioInternal("lsimpson", persona); // lo saco directamente del OMBContext pero deberia hacerlo de SecServices (pensar que se utilizaria tambien // en la UI donde asignamos o quitamos perfiles a un usuario) // var perfiles = from p in DB.Contexto.Perfiles where p.ID == 2 || p.ID == 3 select p; user.Perfiles = new HashSet<Perfil>(perfiles); // actualizamos el usuario en la DB serv.CrearUsuario(user, "lisa-123"); }
private void Logout() { SecurityServices serv = new SecurityServices(); serv.CerrarSesion(); UserConnectedName = "<Desconectado>"; UserConnected = false; }