Я пытаюсь создать собственный HttpModule, который контролирует, какие пользователи могут просматривать сайт.
Я пытаюсь использовать для этого проверку подлинности Windows.
На отдельной странице я бы, вероятно, сделал что-то вроде этого:
if (HttpContext.Current.User.Identity.Name.Contains("jsmith"))
{
Response.Write("You do not have the correct permissions to view this site.");
Response.End();
}
Но поскольку я хочу сделать это более настраиваемым на уровне приложений, я бы хотел использовать HttpModule.
Вот начало, которое я сделал для кода:
using System;
using System.Web;
public class CustomAuthHttpModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(OnBeginRequest);
context.EndRequest += new EventHandler(OnEndRequest);
}
void OnBeginRequest(object sender, EventArgs e) { }
void OnEndRequest(object sender, EventArgs e)
{
HttpApplication appObject = (HttpApplication)sender;
HttpContext contextObject = appObject.Context;
if (contextObject.User.Identity.Name.Contains("jsmith"))
{
contextObject.Response.Clear();
contextObject.Response.End();
}
}
}
Я бы согласился с использованием имеющегося у меня кода, если бы я мог поместить его в функцию OnBeginRequest (). Но свойство User не создается в объекте HttpContext, пока не будет запущено OnEndRequest ().
Запуск кода ранее помешал бы приложению выполнить дополнительную работу по созданию этого вывода, поскольку некоторые пользователи просто будут заблокированы от доступа в конце.
Может кто-нибудь предложить решение этой проблемы - это происходит потому, что мой модуль работает до модуля проверки подлинности Windows или как?
... или, может быть, есть более простой способ сделать то, что я пытаюсь сделать с разрешениями IIS или файловой системы?