// Por cuestiones de seguirdad, TIENE que ser privado.
        private void cambiar_perfil(string perfil_elegido)
        {
            // Si es un distinto perfil, cambie los permisos.
            if (IdentidadManager.obtener_perfil_actual() != perfil_elegido)
            {
                string correo_actual = IdentidadManager.obtener_correo_actual();

                var identidad = new ClaimsIdentity
                                (
                    new[]
                {
                    new Claim(ClaimTypes.Email, correo_actual),
                    new Claim(ClaimTypes.Role, perfil_elegido)
                },
                    DefaultAuthenticationTypes.ApplicationCookie
                                );

                AuthController.eliminar_privilegios(this);

                Thread.CurrentPrincipal = new ClaimsPrincipal(identidad);
                HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties {
                    IsPersistent = false
                }, identidad);
                Session[correo_actual] = new IdentidadManager();
            }
        }
        // Devuelve los perfiles del usuario loggeado.
        public static ICollection <string> ObtenerPerfiles()
        {
            Opiniometro_DatosEntities db = new Opiniometro_DatosEntities();
            string correo_autenticado    = IdentidadManager.obtener_correo_actual();
            ICollection <String> perfiles;

            perfiles = db.ObtenerPerfilUsuario(correo_autenticado).ToList();
            return(perfiles);
        }
        public ActionResult Login(Usuario usuario)
        {
            eliminar_privilegios(this);
            ObjectParameter exito          = new ObjectParameter("Resultado", 0);
            bool            error_conexion = false;

            try
            {
                db.SP_LoginUsuario(usuario.CorreoInstitucional, usuario.Contrasena, exito);
            }
            catch (EntityException)
            {
                error_conexion = true;
                exito.Value    = false;
            }

            if (IdentidadManager.obtener_correo_actual() != null)      // Si esta autenticado
            {
                return(RedirectToAction("Index", "Home"));
            }
            else if ((bool)exito.Value == true) // Si se pudo autenticar (correo y contrasenna validos).
            {
                // Note que si se cambia la contrasenna no se crea ninguna sesion.

                var recuperar_contrasena = db.Usuario.Where(m => m.CorreoInstitucional == usuario.CorreoInstitucional).ToList();
                if (recuperar_contrasena.ElementAt(0).RecuperarContrasenna == true)
                {
                    Session["recuperar"] = usuario.CorreoInstitucional;
                    return(RedirectToAction("CambiarContrasenna"));
                }
                else
                {
                    crear_sesion(usuario.CorreoInstitucional);
                    return(RedirectToAction("Cambiar", "Perfil"));
                }
            }
            else    // Si hay error en la autenticacion
            {
                // Desplegar mensaje de error personalizado.
                string mensaje_error = "";
                if (error_conexion == true)
                {
                    mensaje_error = "Error de conexión al servidor";
                }
                else
                {
                    mensaje_error = "Usuario o contraseña inválidos";
                }

                ModelState.AddModelError("ErrorLogin", mensaje_error);


                // Devolverse a la misma pagina de Login informando de que hay un error de autenticacion.
                return(View(usuario));
            }
        }
 public ActionResult Index()
 {
     if (IdentidadManager.verificar_sesion(this) == true)
     {
         return(View("Index"));
     }
     else
     {
         return(RedirectToAction("Login", "Auth"));
     }
 }
示例#5
0
        public ActionResult Index()
        {
            DateTime fecha = DateTime.Now;

            var modelo = new CursosMatriculadoModel
            {
                gruposMatriculado = ObtenerGrupoMatriculado(obtenerCedulaEstLoggeado(IdentidadManager.obtener_correo_actual()), ciclo(fecha.Month), fecha.Year)
            };
            var grupo = modelo.gruposMatriculado.ToList().ElementAt(0);

            Debug.WriteLine("\n\nEn EstudiantesGruposMatriculado: " + grupo.anoGrupo + " " + grupo.semestreGrupo + " " + grupo.siglaCursoMatriculado + " " + grupo.numGrupo + ".\n");
            return(View("Index", modelo));
        }
        public static void eliminar_privilegios(Controller controlador)
        {
            // En caso de que no exista sesion, no tiene por que hacer algo.
            if (IdentidadManager.verificar_sesion(controlador))
            {
                string correo = IdentidadManager.obtener_correo_actual();               // Obtengo el correo para obtener la sesion.
                ((IdentidadManager)controlador.Session[correo]).limpiar_permisos();     // Limpio los permisos.
                controlador.Session.Remove(correo);                                     // Remuevo la sesion.
            }

            // Elimino cookies.
            controlador.Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
        }
        public ActionResult Cambiar()
        {
            PerfilesUsuario model = new PerfilesUsuario();

            model.ListaPerfiles = ObtenerPerfiles();

            // Si el usuario recien se loggea
            if (IdentidadManager.obtener_perfil_actual() == null)
            {
                // Se escoge un perfil por defecto en caso de que le de cancelar o pase de pagina (no elige perfil).
                cambiar_perfil(model.ListaPerfiles.ElementAt(0));
            }
            // Si no es la primera vez, no se cambia el perfil porque ya hay uno elegido.

            return(View("Cambiar", model));
        }
        /* GET: Auth/Login
         * EFECTO: retornar vista parcial, la cual implica que no se despliega _Layout de la carpeta Shared.
         * REQUIERE: cshtml con el nombre Login.
         * MODIFICA: n/a
         */
        public ActionResult Login()
        {
            // Eliminar el correo de recuperar en caso de que se devuelva al login de haber cambiado la contrasenna.
            Session.Remove("recuperar");

            // Si esta autenticado, redireccione a Home.
            if (IdentidadManager.obtener_correo_actual() != null && IdentidadManager.verificar_sesion(this) == true)
            {
                return(RedirectToAction("Index", "Home"));
            }
            // Si no, retorne la vista para el login.
            else
            {
                return(View("Login"));
            }
        }
        public void obtener_correo_actual_test()
        {
            // Mocks necesarios para tener una sesion "de mentira".
            var mock_controller_contexto = new Mock <ControllerContext>();
            var mock_session             = new Mock <HttpSessionStateBase>();

            var identidad = new ClaimsIdentity(
                new[] {
                new Claim(ClaimTypes.Email, "*****@*****.**")
            },
                DefaultAuthenticationTypes.ApplicationCookie);

            Thread.CurrentPrincipal = new ClaimsPrincipal(identidad);

            var resultado_correo = IdentidadManager.obtener_correo_actual();

            Assert.AreEqual("*****@*****.**", resultado_correo);
        }
        public void obtener_perfil_actual_test()
        {
            // Mocks necesarios para tener una sesion "de mentira".
            var mock_controller_contexto = new Mock <ControllerContext>();
            var mock_session             = new Mock <HttpSessionStateBase>();

            var identidad = new ClaimsIdentity(
                new[] {
                // Nuevo perfil.
                new Claim(ClaimTypes.Role, "Perfil Prueba")
            },
                DefaultAuthenticationTypes.ApplicationCookie);

            Thread.CurrentPrincipal = new ClaimsPrincipal(identidad);

            var resultado_perfil = IdentidadManager.obtener_perfil_actual();

            Assert.AreEqual("Perfil Prueba", resultado_perfil);
        }
        private void crear_sesion(string correo)
        {
            // Creo una entidad solo con el correo, falta elegir perfil.
            var identidad = new ClaimsIdentity(
                new[] {
                new Claim(ClaimTypes.Email, correo),
            },
                DefaultAuthenticationTypes.ApplicationCookie);

            // Elimino cualquier cookie o session para no retener nada que no se va usar (preventivo).
            eliminar_privilegios(this);

            // Guardo la identidad para poder accederla desde cualquier otro sitio.
            Thread.CurrentPrincipal = new ClaimsPrincipal(identidad);
            HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties {
                IsPersistent = false
            }, identidad);

            // Creo objeto IdentidadManager, la llave (para acceder al objeto) seria el correo, el cual es unico para cada usuario.
            Session[correo] = new IdentidadManager();
        }
示例#12
0
        // GET: SeleccionPermisos
        public ActionResult SeleccionarPermisos()
        {
            //Verificar si sesion esta activa
            if (IdentidadManager.verificar_sesion(this) == true)
            {
                //Verificar si es administrador
                if (IdentidadManager.obtener_perfil_actual() == "Administrador")
                {
                    bool asignado;
                    using (var context = new Opiniometro_DatosEntities())
                    {
                        SeleccionPermisos model = new SeleccionPermisos();
                        model.ListaPerfiles = Perfil.ObtenerPerfilesMenosAdmin();//No se deben editar los permisos de administrador desde la aplicacion

                        model.ListaPermisos = context.Permiso.ToList();
                        model.ListaPosee    = context.Posee_Enfasis_Perfil_Permiso.ToList();
                        model.ListaEnfasis  = context.Enfasis.ToList();
                        model.ListaAsoc     = new List <SeleccionPermisos.Asociaciones>();//Contiene la listaPosee pero sin tuplas que repitan enfasis
                        model.ListaGuardar  = new List <SeleccionPermisos.GuardarPerm>();

                        foreach (var posee in model.ListaPosee)
                        {
                            SeleccionPermisos.Asociaciones asoc = new SeleccionPermisos.Asociaciones(posee.NombrePerfil, posee.IdPermiso);
                            //Para verificar si ya existe la combinacion de permiso en una tupla solamente de permiso (id) y perfil (id)
                            //para no insertarla en la lista ListaAsoc. Todo esto pues hay tuplas muy similares debido a que lo que difiere es el enfasis
                            if (!model.ListaAsoc.Any(item => item.Perfil == asoc.Perfil && item.Permiso == asoc.Permiso))
                            {
                                model.ListaAsoc.Add(asoc);
                            }
                        }

                        //Se llena la listaGuardar tanto con las relaciones existentes como con las posibles que se pueden crear a partir de un seleccion de checkbox
                        foreach (var perfil in model.ListaPerfiles)
                        {
                            foreach (var permiso in model.ListaPermisos)
                            {
                                asignado = false;//Para cada combinacion
                                for (int cont = 0; cont < model.ListaAsoc.Count; cont++)
                                {
                                    //Si existe la combinacion la agrega indicando que es existente
                                    if (perfil.Nombre == model.ListaAsoc[cont].Perfil && permiso.Id == model.ListaAsoc[cont].Permiso)
                                    {
                                        model.ListaGuardar.Add(new SeleccionPermisos.GuardarPerm(perfil.Nombre, permiso.Id, true));
                                        asignado = true;
                                    }
                                    //Si no existe
                                    if (cont == model.ListaAsoc.Count - 1 && asignado == false)
                                    {
                                        model.ListaGuardar.Add(new SeleccionPermisos.GuardarPerm(perfil.Nombre, permiso.Id, false));
                                        asignado = false;
                                    }
                                }
                            }
                        }
                        return(View(model));
                    }
                }
                //No tiene permiso entonces se redirige a Home
                else
                {
                    return(RedirectToAction("Index", "Home"));
                }
            }
            //Si no entonces a re-autenticarse
            else
            {
                return(RedirectToAction("Login", "Auth"));
            }
        }