权限管理页面控制-替换session
2012-04-14 14:58
351 查看
每个用户对应一个角色,我们只需要对这个角色进行分配相应的权限即可,也就是给这个用户分配了权限,这样管理起来很方便,设计也很简答,大概就是用户表,角色表,模块表,在加上一个角色与模块对应的表就可以了,然后根据不同的用户权限,显示相应的模块或者提示没有权限访问,这里要说的就是,对每个页面的访问权限,如果都写的话,这么多的页面是个很大的工作量,类似判断用户是否登录一样,在asp.net中我们完全可以使用Forms验证来代替使用session每个页面都要判断的做法,同样,在这里我们也可以通过HttpModule来直接过滤掉没有访问权限的页面,方便多了,我们知道HttpModule可以再服务器端接收处理之前进行相关的过滤,这点给我们提供很大的方便,我们完全可以利用它的这一点,具体的来看看下:
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);
}
/// <summary>
/// 检测用户权限
/// </summary>
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");
}
/// <summary>
/// 判断页面是否为受权限管理保护的资源(如Aspx等)
/// </summary>
/// <param name="page">所请求的页面</param>
/// <returns>是否受保护</returns>
bool isProtectedResource(string page)
{
page = page.ToLower();
System.Collections.Generic.List<String> protectedFiles =
new System.Collections.Generic.List<string>(); //受保护资源的扩展名
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)
{
//可以在此放置自定义日志记录逻辑
}
}
Web.coinfig中配置下
<httpModules>
<add name="CheckUserModule" type="SJL.Web.HttpCode.CheckUserModule"/>
</httpModules>
先判断是否登录,是否是受保护的资源,然后根据url来判断是否有权限访问!
多思考,多创新,才是正道!
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);
}
/// <summary>
/// 检测用户权限
/// </summary>
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");
}
/// <summary>
/// 判断页面是否为受权限管理保护的资源(如Aspx等)
/// </summary>
/// <param name="page">所请求的页面</param>
/// <returns>是否受保护</returns>
bool isProtectedResource(string page)
{
page = page.ToLower();
System.Collections.Generic.List<String> protectedFiles =
new System.Collections.Generic.List<string>(); //受保护资源的扩展名
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)
{
//可以在此放置自定义日志记录逻辑
}
}
Web.coinfig中配置下
<httpModules>
<add name="CheckUserModule" type="SJL.Web.HttpCode.CheckUserModule"/>
</httpModules>
先判断是否登录,是否是受保护的资源,然后根据url来判断是否有权限访问!
多思考,多创新,才是正道!
相关文章推荐
- 在前后端分离的项目中,后台使用shiro框架时,怎样使用它的会话管理系统(session),从而实现权限控制
- MOSS字段编辑权限控制方案的实现(1)-管理页面的开发和配置信息的持久化
- MOSS字段编辑权限控制方案的实现(1)-管理页面的开发和配置信息的持久化
- Vue + Element UI 实现权限管理系统 前端篇(十三):页面权限控制
- 权限管理系统 页面权限粒度控制设计 GUID在数据库系统的应用
- MOSS字段编辑权限控制方案的实现(1)-管理页面的开发和配置信息的持久化
- 对权限管理页面控制知识
- 权限管理页面控制
- git多用户管理及权限控制
- 基于角色控制的学生权限管理系统
- 利用session 会话分析是否登陆,进行登陆权限管理
- android各大手机系统打开权限管理页面
- android开发 华为 点击跳转到权限管理页面
- 修改用户控制权限管理自启动文件
- 关于html页面拦截器权限控制
- 业务规则管理系统权限控制学习1
- rbac(基于角色权限控制)-------权限管理
- 分享一个Flex管理系统 Session超时的时候 用户操作时自动提示并跳转到登陆页面的方法
- Num53 boss---07(shiro应用&方法注解权限&页面标签权限&shiro权限控制总结)
- Oracle 用户管理与权限控制