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