Exemple #1
0
        private async Task <List <ModulosToSubModulos> > VerDetalleModulos(int idRol)
        {
            try
            {
                List <ModulosToSubModulos> relaciones = new List <ModulosToSubModulos>();

                List <ModulosToSubModulos> query = await(from t0 in context.Col_Roles
                                                         join t1 in context.Col_RolModulos on t0.RolId equals t1.RolId
                                                         join t2 in context.Col_Modulos on t1.ModuloId equals t2.ModuloId
                                                         join t3 in context.Col_SubModuloModulo on new { t2.ModuloId, t0.RolId } equals new { t3.ModuloId, t3.RolId }
                                                         join t4 in context.Col_SubModulos on t3.SubModuloId equals t4.SubModuloId into ModSub
                                                         from t5 in ModSub.DefaultIfEmpty()
                                                         where t0.RolId.Equals(idRol)
                                                         select new ModulosToSubModulos
                {
                    NombreRol        = t0.NombreRol,
                    NombreModulo     = t2.Nombre,
                    NombreSubModulo  = t5.Nombre,
                    ModuloId         = t2.ModuloId,
                    PermisoSubModulo = t3.PermisosCrud,
                    PermisoModulo    = t1.PermisosCrud,
                    SubModuloId      = t5.SubModuloId
                }).ToListAsync();

                if (query.Count() == 0)
                {
                    query = await(from t0 in context.Col_Roles
                                  join t1 in context.Col_RolModulos on t0.RolId equals t1.RolId
                                  join t2 in context.Col_Modulos on t1.ModuloId equals t2.ModuloId
                                  where t0.RolId.Equals(idRol)
                                  select new ModulosToSubModulos
                    {
                        NombreRol     = t0.NombreRol,
                        NombreModulo  = t2.Nombre,
                        ModuloId      = t2.ModuloId,
                        PermisoModulo = t1.PermisosCrud
                    }).ToListAsync();
                }

                foreach (ModulosToSubModulos item in query)
                {
                    ModulosToSubModulos relacion = new ModulosToSubModulos();
                    if (!relaciones.Where(w => w.NombreModulo == item.NombreModulo).Any())
                    {
                        List <ModulosToSubModulos> _relaciones = new List <ModulosToSubModulos>();
                        List <string> _permisos = new List <string>();
                        relacion.NombreModulo = item.NombreModulo;
                        relacion.ModuloId     = item.ModuloId;
                        relacion.NombreRol    = item.NombreRol;
                        if (item.PermisoModulo != null)
                        {
                            string        reemplazarModulo = item.PermisoModulo.Replace('\n', ' ');
                            List <string> permisosModulo   = reemplazarModulo.Split(',').ToList();
                            foreach (string temp in permisosModulo)
                            {
                                _permisos.Add(temp);
                            }
                        }
                        else
                        {
                            foreach (ModulosToSubModulos temp in query.Where(w => w.NombreModulo == item.NombreModulo && w.NombreSubModulo != null).ToList())
                            {
                                ModulosToSubModulos _relacion     = new ModulosToSubModulos();
                                string        reemplazarSubModulo = temp.PermisoSubModulo.Replace('\n', ' ');
                                List <string> permisosSubModulo   = reemplazarSubModulo.Split(',').ToList();
                                _relacion.NombreSubModulo = temp.NombreSubModulo;
                                _relacion.Permisos        = permisosSubModulo;
                                _relacion.ModuloId        = temp.ModuloId;
                                _relacion.SubModuloId     = temp.SubModuloId;
                                _relaciones.Add(_relacion);
                            }
                        }
                        relacion.Permisos   = _permisos;
                        relacion.Relaciones = _relaciones;
                        relaciones.Add(relacion);
                    }
                }
                return(relaciones);
            }
            #region catch
            catch (DbEntityValidationException e)
            {
                string err = "";
                foreach (DbEntityValidationResult eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                      eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (DbValidationError ve in eve.ValidationErrors)
                    {
                        err += ve.ErrorMessage;
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                          ve.PropertyName, ve.ErrorMessage);
                    }
                }
                return(null);
            }

            catch (Exception e)
            {
                string err = "";
                if (e.InnerException != null)
                {
                    if (e.InnerException.Message != null)
                    {
                        err = (e.InnerException.Message);
                        if (e.InnerException.InnerException != null)
                        {
                            err += e.InnerException.InnerException.Message;
                        }
                    }
                }
                else
                {
                    err = (e.Message);
                }
                return(null);
            }
            #endregion
        }
        /// <summary>
        /// Pregunta por un usuario existente, verifica la contraseña encriptada, genera codigo token que
        /// expira en un dia, este token servira para la url local
        /// </summary>
        /// <param name="usuario">Nombre del usuario</param>
        /// <param name="contrasena">Contraseña del usuario</param>
        /// <returns>Objeto tipo ClaimsIdentity</returns>
        public async Task <ClaimsIdentity> LoginUser(string usuario, string contrasena)
        {
            try
            {
                Models.Col_Usuarios user = await contexto.Col_Usuarios
                                           .Where(w => w.Usuario.Equals(usuario) && w.Estado.Equals("A"))
                                           .FirstOrDefaultAsync();

                if (user == null)
                {
                    return(null);
                }
                if (SHA256(contrasena) == user.Contrasena)
                {
                    //List<UsuariosPerfiles> _usuario = new List<UsuariosPerfiles>();
                    //using (SqlConnection sql = new SqlConnection(Configuration.GetConnectionString("DefaultConnection")))
                    //{
                    //    using (SqlCommand cmd = new SqlCommand("LoginPermisos", sql))
                    //    {
                    //        cmd.CommandType = CommandType.StoredProcedure;
                    //        cmd.Parameters.Add(new SqlParameter("@Id", user.Id));
                    //        await sql.OpenAsync();

                    //        using (var reader = await cmd.ExecuteReaderAsync())
                    //        {
                    //            while (await reader.ReadAsync())
                    //            {
                    //                _usuario.Add(MapToValue(reader));
                    //            }
                    //        }
                    //    }
                    //}

                    List <UsuariosPerfiles> query = await(from t0 in contexto.Col_Roles
                                                          join t6 in contexto.Col_Usuarios on t0.RolId equals t6.RolId
                                                          join t1 in contexto.Col_RolModulos on t0.RolId equals t1.RolId
                                                          join t2 in contexto.Col_Modulos on t1.ModuloId equals t2.ModuloId
                                                          join t3 in contexto.Col_SubModuloModulo on new { t2.ModuloId, t0.RolId } equals new { t3.ModuloId, t3.RolId }
                                                          join t4 in contexto.Col_SubModulos on t3.SubModuloId equals t4.SubModuloId into ModSub
                                                          from t5 in ModSub.DefaultIfEmpty()
                                                          where t6.Id.Equals(user.Id)
                                                          select new UsuariosPerfiles
                    {
                        PermisosModulo    = t1.PermisosCrud.Replace("\n", ""),
                        PermisosSubModulo = t3.PermisosCrud.Replace("\n", ""),
                        Modulos           = t2.Nombre,
                        SubModulos        = t5.Nombre,
                    }).ToListAsync();

                    if (query.Count() == 0)
                    {
                        query = await(from t0 in contexto.Col_Roles
                                      join t3 in contexto.Col_Usuarios on t0.RolId equals t3.RolId
                                      join t1 in contexto.Col_RolModulos on t0.RolId equals t1.RolId
                                      join t2 in contexto.Col_Modulos on t1.ModuloId equals t2.ModuloId
                                      where t3.Id.Equals(user.Id)
                                      select new UsuariosPerfiles
                        {
                            PermisosModulo = t1.PermisosCrud.Replace("\n", ""),
                            Modulos        = t2.Nombre
                        }).ToListAsync();
                    }

                    //Authentication successful, Issue Token with user credentials
                    //Provide the security key which is given in
                    //Startup.cs ConfigureServices() method
                    byte[] key = Encoding.ASCII.GetBytes
                                     ("YourKey-2374-OFFKDI940NG7:56753253-tyuw-5769-0921-kfirox29zoxv");
                    //Generate Token for user
                    List <Claim>     claimsData = GetUserClaims(query, user.Usuario);
                    JwtSecurityToken JWToken    = new JwtSecurityToken(
                        issuer: "http://localhost:45092/",
                        audience: "http://localhost:45092/",
                        claims: claimsData,
                        notBefore: new DateTimeOffset(DateTime.Now).DateTime,
                        expires: new DateTimeOffset(DateTime.Now.AddDays(1)).DateTime,
                        //Using HS256 Algorithm to encrypt Token
                        signingCredentials: new SigningCredentials
                            (new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                        );
                    string              token          = new JwtSecurityTokenHandler().WriteToken(JWToken);
                    ClaimsIdentity      claimsIdentity = new ClaimsIdentity(claimsData, token);
                    Models.Col_Usuarios _usuario       = await contexto.Col_Usuarios.Where(w => w.Id.Equals(user.Id)).FirstOrDefaultAsync();

                    _usuario.UltimoLogin = DateTime.Now;
                    contexto.Col_Usuarios.Update(_usuario);
                    await contexto.SaveChangesAsync();

                    return(claimsIdentity);
                }
                else
                {
                    return(null);
                }
            }
            #region catch
            catch (DbEntityValidationException e)
            {
                string err = "";
                foreach (DbEntityValidationResult eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                      eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (DbValidationError ve in eve.ValidationErrors)
                    {
                        err += ve.ErrorMessage;
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                          ve.PropertyName, ve.ErrorMessage);
                    }
                }
                return(null);
            }

            catch (Exception e)
            {
                string err = "";
                if (e.InnerException != null)
                {
                    if (e.InnerException.Message != null)
                    {
                        err = (e.InnerException.Message);
                        if (e.InnerException.InnerException != null)
                        {
                            err += e.InnerException.InnerException.Message;
                        }
                    }
                }
                else
                {
                    err = (e.Message);
                }
                return(null);
            }
            #endregion
        }