zoukankan      html  css  js  c++  java
  • 权限验证AuthorizeAttribute

    /// <summary>
        /// 权限验证属性。
        /// </summary>
        public class AuthorizeExAttribute : AuthorizeAttribute
        {
            /// <summary>
            /// 初始化权限验证类。
            /// </summary>
            /// <param name="permissionName">权限名称。</param>
            public AuthorizeExAttribute(string permissionName = "") {
                this.PermissionName = permissionName;
            }
            /// <summary>
            /// 获取权限名称。
            /// </summary>
            public string PermissionName { get; private set; }
    
            /// <summary>
            /// 验证授权。
            /// </summary>
            /// <param name="httpContext">HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
            /// <returns>如果用户已经过授权,则为 true;否则为 false。</returns>
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                if(httpContext == null)
                    return false;
                if(httpContext.User.Identity.IsAuthenticated)
                {
                    var user = Users.Current;
                    if(!user.IsAnonymous && IsAllow(user) && base.AuthorizeCore(httpContext))
                        return true;
                }
                httpContext.Response.StatusCode = 403;
                return false;
            }
    
            private bool IsAllow(User user)
            {
                //写上验证代码
                return true;
            }
    
            /// <summary>
            /// 重写验证。
            /// </summary>
            /// <param name="filterContext">验证信息上下文。</param>
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                base.OnAuthorization(filterContext);
                if(filterContext.HttpContext.Response.StatusCode == 403)
                {
                    if(filterContext.HttpContext.User.Identity.IsAuthenticated)
                        filterContext.Result = new RedirectResult("/AccessError");
                    else
                        filterContext.Result = new RedirectResult(FormsAuthentication.LoginUrl + "?returnUrl=" + filterContext.HttpContext.Request.UrlReferrer);
                } 
            }

    中User是本人定义的一个用户实体类,而Users是这个实体类的方法类,这里就补贴出代码,可以自己实现下,因为各个的应用不同。知道了这个权限验证的权限名称,可以通过它来获取权限的值,那样就可以验证当前用户的这个权限是否通过验证。只需要重写他的代码,就可以实现验证了,为了能够告诉前端用户,提示禁止访问信息,这里设置了一个页面就是AccessError页面。

    当然返回的页面也有不一样的,加入是匿名用户就需要让他登录,所以转向到登录页面,而如果是登录的用户就转向到禁止访问提示页面。这只是开发中需要验证的一个过滤器,在ASP.NET MVC开发中会使用到。

    ASP.NET MVC 4.0改进:

    笔者发现在MVC4.0后,微软加了一个AllowAnoumous的过滤器验证,即允许匿名用户访问,方法上的过滤器可以覆盖掉控制器上的标记。这样做有一个好处,因为很多地方都是需要登录后才可以访问的,但是像登录页面,注册页面这些又不需要登录。但是往往都会放在Account控制器中,这样可以方便验证。 由于要上班这里就不多说了,希望能够学到点东西,同时也给他人...

    记忆力下降,日常日志
  • 相关阅读:
    wince串口打印信息的屏蔽与打开
    2440 6.0BSP 移植过程之OAL
    2440 6.0BSP移植过程之电池驱动
    2440 6.0BSP移植过程之SD卡驱动
    如何在wince6.0 模拟器上跑以前编译好的EVC MFC程序
    2440 休眠唤醒的实现过程(作者:wogoyixikexie@gliet)
    CETK的使用(USB连接方式)
    如何扩展ARM内存(OEMGetExtensionDRAM和pNKEnumExtensionDRAM函数可以解决问题)
    ZLG7290(wince下)驱动之不停执行同一动作的解决办法(作者:wogoyixikexie@gliet)
    2440 中断优先级问题(作者wogoyixikexie@gliet)
  • 原文地址:https://www.cnblogs.com/yushuo/p/4538031.html
Copyright © 2011-2022 走看看