Мне не нравится подход базовой страницы. Для меня это слишком поздно для проверки безопасности.
Вы можете создать свой собственный HttpModule, чтобы проверить это, либо сохраняя информацию об авторизации в базе данных / xml / ... или читая ее, используя отражение на странице.
context.Handler будет содержать класс Page, который вы выполняете. Таким образом, вы можете сделать что-то вроде этого:
Я копирую часть кода, который я использую, он проверяет роли, общедоступные страницы, пропускает проверку на наличие картинок и скриптов (но вы также можете это сделать):
// In the HttpModule:
public void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
// Don´t validate permissions if the user wasn´t allowed by the asp.net security
// Neighter the advanced (custom) permissions are validated for non ASPX files.
if (!context.Request.FilePath.EndsWith(".aspx") || !context.User.Identity.IsAuthenticated)
return;
// Give full access to the unathorized error page, and logins, and so on...
string pageClass = context.Handler.GetType().BaseType.FullName;
string param = context.Request["p"];
if (!string.IsNullOrEmpty(param))
pageClass += "@" + param;
if (SecurityService.IsFullTrustClass(pageClass))
return;
if (SecurityService.Context.CurrentPerson == null)
{
LogOff();
return;
}
// Verify access permissions for the current page
IList<Role> roles = SecurityService.Context.CurrentPerson.Roles;
bool allow = SecurityService.HasAccessPermission(pageClass, roles);
if (!allow)
{
LogOff();
}
}