// 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")); } }
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(); }
// 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")); } }