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