Ich mag nicht über die Basisseite Ansatz. Für mich ist es zu spät, um die Sicherheit zu überprüfen. Sie können Ihr eigenes HttpModule erstellen, um dies zu überprüfen, indem Sie entweder die Autorisierungsinformationen in einer Datenbank/xml/... speichern oder sie durch Reflektion auf der Seite lesen.
Der context.Handler enthält die von Ihnen ausgeführte Klassenseite. So können Sie etwas tun:
kopiere ich ein Teil des Codes ich verwende, überprüft es Rollen, öffentliche Seiten, überspringt die Prüfung für Bilder und Skripte (aber man könnte es auch tun):
// 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();
}
}