当前位置:编程学习 > asp >>

权限管理页面控制

我们知道对于权限管理这块,采取的思想就是RBAC
 每个用户对应一个角色,我们只需要对这个角色进行分配相应的权限即可,也就是给这个用户分配了权限,这样管理起来很方便,设计也很简答,大概就是用户表,角色表,模块表,在加上一个角色与模块对应的表就可以了,然后根据不同的用户权限,显示相应的模块或者提示没有权限访问,这里要说的就是,对每个页面的访问权限,如果都写的话,这么多的页面是个很大的工作量,类似判断用户是否登录一样,在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);          
        }
       
        /// <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;                    
            //检测用户权限 www.zzzyk.com
            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.IsPu

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,