我會用ASP.NET的HttpModule實現一個過濾器,然後在Web.config中配置它。
過濾器可以檢查頁面的URL以及當前登錄的用戶(和角色...),然後決定是否讓請求通過。
樣品的編號:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections.Specialized;
using Axiomatics.Security.AccessControl.Protocols.Xacml;
namespace axiomatics
{
public class AuthZHttpModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
// context.BeginRequest += new EventHandler(OnBeginRequest);
context.AuthenticateRequest += new EventHandler(onAuthenticateRequest);
}
public void onAuthenticateRequest(Object s, EventArgs e)
{
HttpApplication app = s as HttpApplication;
// HttpModule called - let's check the current situation
Global g = (Global)s;
String username = "";
if (g.User!=null && g.User.Identity!=null){
username = g.User.Identity.Name;
}
string requestUrl = g.Request.Url.LocalPath;
// Only protect .aspx pages
if (requestUrl.EndsWith("aspx")){
AuthorizationDecision decision = PDPUtil.pageAuthorized(username, g.Request);
bool grantPageAccess = decision.Decision == Decision.Permit;
if (grantPageAccess == false)
{
g.Response.Redirect("/error.aspx");
}
}
}
}
}
在示例代碼,我使用了XACML驅動授權引擎(PDPUtil.pageAuthorized()
),以確定訪問是否應當被准許。
如果您願意,您可以用自己的邏輯替換XACML作品。
您是否試圖創建一個管理員窗體來執行ASP.NET配置工具(在VS中)的功能? – IrishChieftain
IrishChieftain - 是的。 –