Пример #1
0
        /// <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");
        }
Пример #2
0
        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;
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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;
        }
Пример #6
0
        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");
        }
Пример #7
0
        private void Logout()
        {
            SecurityServices serv = new SecurityServices();

              serv.CerrarSesion();

              UserConnectedName = "<Desconectado>";
              UserConnected = false;
        }