为什么不自己建立一个PageBase类,让页面继承它。在它的protected override void OnLoad(EventArgs e)里来遍历呢。
我自己的权限这样写:
protected override void OnLoad(EventArgs e)
{
//管理员身份验证
if (WebAdmin.Name == "" || HttpContext.Current.Session["WebAdmin"] == null)
{
.....
}
else
{
#region 权限页面及控件控制
string currentPage = WebRequestOperator.GetPageName();
if (!AdminPowerHt.Contains(currentPage))
{
//无权查看该页面!.....
}
else
{
PageControls(Page, currentPage);
}
#endregion
}
....
base.OnLoad(e);
}
下面这个方法是遍历控件的:
#region 根据权限遍历页面中的所有控件
private void PageControls(Control controlParent, string currentPage)
{
foreach (Control controlTemp in controlParent.Controls)
{
if (controlTemp.HasControls())
{
PageControls(controlTemp, currentPage);
}
else
{
if (controlTemp.ID != null)
{
string controlID = controlTemp.ID.ToString();
string[] controlList = AdminPowerHt[currentPage].ToString().Split('↑');//处理控件
if (StrHelper.InArray(controlID, controlList))
{
controlTemp.Visible = false;
}
}
}
}
}
HttpModule好像不在page的生命周期内,无法处理到page信息
不过httphandler可以做到,也就是先得到page对象,递归遍历控件树,检测控件添加你要的权限
HttpModule 中不能取得页面控件的引用。
重新考虑一下你的设计吧。
分析一下网站中对于用户身份的处理会有帮助。
建立楼主研究一下.NET内置的权限管理机制,稍加改造,足以实现任何权限控制系统