Cómo restringir el acceso al contenido de WordPress en la aplicación .NET / PHP

Tengo un sitio de WordPress para un pequeño diario. Está alojado en IIS en una máquina virtual Azure y utiliza MSSQL en lugar de MySQL. Aunque gran parte del contenido está disponible gratuitamente, quiero restringir el acceso al contenido más reciente a los suscriptores que pagan solo. Me pregunto cómo podría hacer esto. Estaba pensando en agregar un código simple a la babosa de cada publicación / artículo (tal vez simplemente comenzar la baza con ‘protegido-‘). Entonces podría escribir un HttpHandler de C # .NET para verificar el URI en busca del código “protegido”, verificar si el usuario tiene acceso a él a través de entradas en el DB y permitir, o no, acceder. ¿Funcionaría este enfoque? Cualquier otra posibilidad

Tenga en cuenta que no soy un desarrollador de PHP y cualquier solución debe ser implementable usando .NET.

EDIT 200814

He progresado usando un HttpModule para revisar cualquier solicitud entrante. Esto se logró agregando las líneas relevantes a Web.config:

Dentro

   

Dentro

         

donde WpJournalHttpHandler es mi HttpModule personalizado.

Deseo redireccionar cada vez que un usuario intente ver una Publicación / Artículo que contenga un mensaje que contenga “protegido”, por ej., Https://journal.emergentpublications.com/article/protected_eco_010101/

Sin embargo, WP usa la reescritura de URL para que mi HttpModule nunca reciba la URL original para su procesamiento. ¿Debo ejecutar HttpModule antes de reescribir la URL?

Aquí está la entrada de reescritura en mi web.config:

            

EDIT 200814_2

Después de cambiar la parte de reescritura de mi Web.config a:

             

Y si mi HttpModule comprueba context.Request.Url.ToString (). Contiene (“protegido”) como parte del evento AuthenticateRequest ahora puedo filtrar las solicitudes de WP como desee.

Eche un vistazo a Paid Memberships Pro, debe lograr lo que está buscando sin tener que escribir ningún código.

http://www.paidmembershipspro.com/

Nota: No estoy tratando de venderte algo, solo soy fanático de su producto y lo he usado en un par de implementaciones de wordpress.

Agregar un C # .NET HttpModule funcionó al final. El web.config completo para el sitio de WordPress hospedado con IIS es:

                                 

Y el código de esqueleto para mi ContentAccessModule es:

 using System; using System.Web; using System.Diagnostics; namespace WpJournalHttpHandler { public class ContentAccessModule : IHttpModule { private EventLog eventLog; public void Init(HttpApplication application) { application.AuthenticateRequest += Application_AuthenticateRequest; if (!EventLog.SourceExists("WpJournal")) { EventLog.CreateEventSource("WpJournal", "WpJournalActivity"); } eventLog = new EventLog {Source = "WpJournal"}; eventLog.WriteEntry("Application initialized.", EventLogEntryType.Information); } public void Dispose() { //Cleanup } private void Application_AuthenticateRequest(object source, EventArgs e) { HttpContext context = HttpContext.Current; eventLog.WriteEntry("Authentication for " + context.Request.Url + " from " + context.Request.UserHostAddress, EventLogEntryType.Information); if (context.Request.Url.ToString().Contains("protected")) { context.Response.Redirect("https://journal.emergentpublications.com/restricted-content/"); } } private bool IsValidIpAddress(string ipAddress) { return false; } private string IsSubscribed(HttpContext context) { return null; } } } 

Una vez comstackdo, el WpJournalHttpHandler se cargó en el GAC para que lo pudiera encontrar el web.config. Tenga en cuenta que el proyecto WP es en realidad un proyecto PHP creado con ” PHP Tools for Visual Studio 2013 “. Ahora puedo escribir cualquier lógica de acceso que desee para mi contenido de WP usando C # .NET, siempre que cambie el slug de la publicación / artículo para incluir una cadena común como “protegido” (probablemente utilizaré una cadena menos probable) aparecer realmente en un título de Post / Artículo, quizás un breve alfanumérico aleatorio).

Tenga en cuenta que si utiliza el registro de eventos como lo hice, deberá otorgar el permiso del servicio de red para acceder a los registros de eventos.