对权限管理页面控制知识

发布时间:2020-05-17 18:41:15 作者:jgsa
来源:网络 阅读:227

每个用户对应一个角色,我们只需要对这个角色进行分配相应的权限即可,也就是给这个用户分配了权限,这样管理起来很方便,设计也很简答,大概就是用户表,角色表,模块表,在加上一个角色与模块对应的表就可以了,然后根据不同的用户权限,显示相应的模块或者提示没有权限访问,这里要说的就是,对每个页面的访问权限,如果都写的话,这么多的页面是个很大的工作量,类似判断用户是否登录一样,在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;
//检测用户权限     
    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)
   
    {
   
    //可以在此放置自定义日志记录逻辑
   
    }
   
    }
    更多http://www.cnblogs.com/shidaichenxun/
    Web.coinfig中配置下
   
    <httpModules>
   
    <add name="CheckUserModule" type="SJL.Web.HttpCode.CheckUserModule"/>
   
    </httpModules>
   
    先判断是否登录,是否是受保护的资源,然后根据url来判断是否有权限访问!

推荐阅读:
  1. 如何使用sentry对hive进行权限管理?
  2. JS以及CSS对页面的阻塞

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

知识 用户 角色

上一篇:Redux-React 代码原理分析

下一篇:Audio在移动端只播放一次

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》