热门IT资讯网

对权限管理页面控制知识

发表于:2024-11-29 作者:热门IT资讯网编辑
编辑最后更新 2024年11月29日,每个用户对应一个角色,我们只需要对这个角色进行分配相应的权限即可,也就是给这个用户分配了权限,这样管理起来很方便,设计也很简答,大概就是用户表,角色表,模块表,在加上一个角色与模块对应的表就可以了,然

每个用户对应一个角色,我们只需要对这个角色进行分配相应的权限即可,也就是给这个用户分配了权限,这样管理起来很方便,设计也很简答,大概就是用户表,角色表,模块表,在加上一个角色与模块对应的表就可以了,然后根据不同的用户权限,显示相应的模块或者提示没有权限访问,这里要说的就是,对每个页面的访问权限,如果都写的话,这么多的页面是个很大的工作量,类似判断用户是否登录一样,在asp.net中我们完全可以使用Forms验证来代替使用session每个页面都要判断的做法,同样,在这里我们也可以通过HttpModule来直接过滤掉没有访问权限的页面,方便多了,我们知道HttpModule可以再服务器端接收处理之前进行相关的过滤,这点给我们提供很大的方便,我们完全可以利用它的这一点,具体的来看看下:

View Code

public class CheckUserModule : IHttpModule

{

private static string loginPage = "login.aspx";

#region IHttpModule Members

public void Dispose()

{

//此处放置清除代码。

}

public void Init(HttpApplication context)

{

context.AcquireRequestState += new EventHandler(checkUserRight);

}

///



/// 检测用户权限

///


void checkUserRight(object sender, EventArgs e)

{

HttpApplication application = (HttpApplication)sender; // 获取应用程序

string url = HttpContext.Current.Request.Url.ToString(); // 获取Url

int start=url.LastIndexOf('/') + 1; //查找URL中最后一个/的位置

int end=url.IndexOf('?',start); //查找URL中?位置

string requestPage = null;

if (end < 0) end = url.Length - 1;

requestPage=url.Substring(start, end - start +1); //得到所请求的页面

requestPage = requestPage.ToLower();

if (requestPage == loginPage) return;

if (!isProtectedResource(requestPage)) return;

User user=SJL.Web.HttpCode.WebUtility.currentUser; //获得当前用户

if (user==null)

{

application.Response.Redirect("~/Login.aspx");

return;

}

if (SJL.Bll.UserRight.UserBLL.isAdmin(user)) return;
//检测用户权限
if (!SJL.Bll.UserRight.RoleRightBLL.canAccessPage(user.RoleID, requestPage))

application.Response.Redirect("~/AccessDeny.htm");

}

///

/// 判断页面是否为受权限管理保护的资源(如Aspx等)

///


/// 所请求的页面

/// 是否受保护

bool isProtectedResource(string page)

{

page = page.ToLower();

System.Collections.Generic.List protectedFiles =

new System.Collections.Generic.List(); //受保护资源的扩展名

protectedFiles.AddRange(new string[] { ".aspx", ".asmx", ".ashx" });

string found=protectedFiles.Find(s => page.EndsWith(s));

if (found == null)

return false;

ApplicationModule module = SJL.Bll.UserRight.ApplicationModuleBLL.getByUrl(page);

if (module == null) return false;

return !module.IsPublic; //如果页面为公共模块则不受保护

}

#endregion

public void OnLogRequest(Object source, EventArgs e)

{

//可以在此放置自定义日志记录逻辑

}

}
更多http://www.cnblogs.com/shidaichenxun/
Web.coinfig中配置下







先判断是否登录,是否是受保护的资源,然后根据url来判断是否有权限访问!

0