zoukankan      html  css  js  c++  java
  • 自定义授权筛选器

    Demo

        [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
        public class AdminAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
        {
            public void OnAuthorization(AuthorizationContext filterContext)
            {
                if (SkipAuthorization(filterContext))
                {
                    return;
                }
                if (filterContext == null)
                    throw new ArgumentNullException("filterContext");
    
                //判断是否已登陆
                if (HttpContext.Current == null ||
                    !HttpContext.Current.Request.IsAuthenticated ||
                    !(HttpContext.Current.User.Identity is FormsIdentity))
                {
                    filterContext.Result = new HttpUnauthorizedResult();
                }
                else
                {
                    //判断角色权限
                    var authenticationService = DependencyResolver.Current.GetService<IFormsAuthenticationService>();
                    var roleRelationFunction = new List<CustomerRoleFunction>();
                    var controllerName = filterContext.RouteData.Values["controller"].ToString();
                    var actionName = filterContext.RouteData.Values["action"].ToString();
                    var customer = authenticationService.GetCustomer();
                    if (customer != null)
                    {
                        roleRelationFunction.AddRange(customer.CustomerRoles.SelectMany(roles => roles.CustomerRoleFunctions));
                    }
                    if (!roleRelationFunction.Any(c => c.ActionName == actionName && c.ControllerName == controllerName))
                    {
                        HandleUnauthorizedRequest(filterContext, "你无此权限,如需要请通知管理员添加,点击返回");
                    }
                }
            }
    
            private void HandleUnauthorizedRequest(AuthorizationContext filterContext, string message)
            {
                var content = new ContentResult
                {
                    Content = string.Format("<a href='javascript:history.go(-1);'>{0}</a>", message)
                };
                filterContext.Result = content;
            }
    
            /// <summary>
            /// 过滤 AllowAnonymousAttribute 特性
            /// </summary>
            /// <param name="filterContext"></param>
            /// <returns></returns>
            private static bool SkipAuthorization(AuthorizationContext filterContext)
            {
                Contract.Assert(filterContext != null);
    
                return filterContext.ActionDescriptor.GetCustomAttributes(typeof(AllowAnonymousAttribute), true).Any()
                       || filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(AllowAnonymousAttribute), true).Any();
            }
        }
  • 相关阅读:
    Fiddler抓包7-post请求(json)(转载)
    Fiddler抓包6-get请求(url详解)(转载)
    Fiddler抓包5-接口测试(Composer)(转载)
    Fiddler抓包4-工具介绍(request和response)(转载)
    辨析各类web服务器:Apache/Tomcat/Jboss/Nginx/等,还有Nodejs
    Java Web学习脑图
    python字符编码与解码 unicode,str
    编程题之--链表反置
    Java集合系列
    搞清楚基本问题
  • 原文地址:https://www.cnblogs.com/ideacore/p/7600850.html
Copyright © 2011-2022 走看看