// 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);
        }
Пример #4
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"));
            }
        }