Beispiel #1
0
        /// <summary>
        /// Metodo que valida si un usuario tiene un permiso asignado
        /// </summary>
        /// <param name="permisoNecesario">Permiso que desea verificarse</param>
        public Boolean ContieneRol(String permisoNecesario)
        {
            var authHeader = WebOperationContext.Current.IncomingRequest.Headers["Authorization"];
            var SUDOHeader = WebOperationContext.Current.IncomingRequest.Headers["SUDO"];

            if ((authHeader != null) && (authHeader != string.Empty))
            {
                try
                {
                    var    access_token    = Encrypted.Decode(authHeader);
                    var    token           = JsonConvert.DeserializeObject <Dictionary <string, object> >(access_token);
                    var    usuario         = token["usuario"].ToString();
                    var    fechaExpiracion = DateTime.Parse(token["exp"].ToString());
                    string recursos        = token["resources"].ToString();
                    if (DateTime.Now > fechaExpiracion)
                    {
                        throw new WebFaultException <string>("El Token de Acceso Expiró", HttpStatusCode.Unauthorized);
                    }
                    List <string> listaRecursos = new List <string>();
                    if ((SUDOHeader != null) && (SUDOHeader != string.Empty))
                    {
                        SecurityBusiness securityBusiness = new SecurityBusiness();
                        var informacionDecodificadaSUDO   = new Encrypted().Base64DecodeToString(SUDOHeader);
                        var credenciales = informacionDecodificadaSUDO.Split(':');
                        var userResponse = new SecurityBusiness().LoginSUDO(Int32.Parse(credenciales[0]), credenciales[1], 1, GetIp());
                        if (userResponse.Data.CodeEstatus == 100)
                        {
                            var recursosSUDO = new SecurityBusiness().ObtenerRecursos(Int32.Parse(credenciales[0]));
                            foreach (string recurso in recursosSUDO.Data.Split('|'))
                            {
                                listaRecursos.Add(recurso);
                            }
                        }
                        else
                        {
                            throw new WebFaultException <string>(userResponse.Data.Estatus, HttpStatusCode.Unauthorized);
                        }
                    }
                    else
                    {
                        foreach (var resource in recursos.Split('|'))
                        {
                            listaRecursos.Add(resource);
                        }
                    }
                    // Validar permisos
                    foreach (String permiso in listaRecursos)
                    {
                        if (permisoNecesario.Equals(permiso))
                        {
                            return(true);
                        }
                    }
                    return(false);
                }
                catch (Exception ex)
                {
                    //Throw an exception with the associated HTTP status code equivalent to HTTP status 401
                    throw new WebFaultException <string>("El Token de acceso no es válido: " + ex.ToString(), HttpStatusCode.Unauthorized);
                }
            }
            else
            {
                //Throw an exception with the associated HTTP status code equivalent to HTTP status 401
                throw new WebFaultException <string>("No existe cabecera de autorización", HttpStatusCode.Unauthorized);
            }
        }