ASP.NET MVC实战之权限拦截Authorize使用

1,具体的实现方法代码如下

cs 复制代码
 public class CustomAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
    {
        /// <summary>
        /// 如果需要验证权限的时候,就执行进来
        /// </summary>
        /// <param name="filterContext"></param>
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            //1.验证是否登录过
            object ouser = filterContext.HttpContext.Session[CacheConstant.CacheCurrentUser()];
            if (ouser == null || (ouser is CurrentUser) == false) //取到session或者取到的session不是CurrentUser---没有登录
            {
                ResponseResult(filterContext);
            }
            else
            {
                //就要取出当前用户的信息,通过用户信息判断,当前这个用户是否能够访问当前要访问的功能  
                CurrentUser currentUser = (CurrentUser)ouser;

                List<Tuple<string, string, string>> tupMen = currentUser.TupMenue;

                List<string> currentUserUrlList = tupMen.Select(c => c.Item3).Where(c => !string.IsNullOrWhiteSpace(c)).Select(c => c.ToUpper()).ToList();

                object ObjectControllerName = filterContext.HttpContext.Request.RequestContext.RouteData.Values["controller"];
                string controllerName = ObjectControllerName.ToString().ToUpper();
                int count = currentUserUrlList.Count(c => c.Contains(controllerName));
                if (count <= 0)
                {
                    if (filterContext.HttpContext.Request.IsAjaxRequest()) //Ajax请求
                    {
                        filterContext.Result = new JsonResult()
                        {
                            Data = new AjaxResult()
                            {
                                Success = false,
                                Message = "对不起,当前功能你没有权限访问"
                            }
                        };
                    }
                    else //非Ajax请求
                    {
                        filterContext.Result = new RedirectResult("/Home/UnAuthorize");
                    }
                }
            }
        }

        /// <summary>
        /// 没有Session的响应
        /// </summary>
        /// <param name="filterContext"></param>
        private static void ResponseResult(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest()) //Ajax请求
            {
                filterContext.Result = new JsonResult()
                {
                    Data = new AjaxResult()
                    {
                        Success = false,
                        Message = "没有登录,无法获取数据"
                    }
                };
            }
            else //非Ajax请求
            {
                filterContext.Result = new RedirectResult("Account/Login");
            }
        }

2,具体在控制器引用权限认证方法

相关推荐
xiaoshuaishuai89 小时前
C# AvaloniaUI 资源找不到报错
java·服务器·前端·windows·c#
Xin_ye100869 小时前
C# 零基础到精通教程 - 第十八章:部署与发布——让应用上线
开发语言·c#
爱讲故事的10 小时前
操作系统第一讲复习:为什么学习操作系统,以及操作系统到底在做什么?
linux·开发语言·windows·学习·ubuntu·c#
无风听海11 小时前
ASP.NET Core .NET 10 错误响应体系全景:从 BadRequest 到编译器基础设施
后端·asp.net·.net
JaydenAI11 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
z落落12 小时前
C# 继承:父子构造函数 + base 关键字 +五大访问修饰符(同项目+跨项目 全覆盖)
开发语言·c#
海盗123413 小时前
C#中PDF操作-QuestPDF页面设置与布局
java·pdf·c#
玩c#的小杜同学13 小时前
一周 AI 新鲜事|2026.05.25—2026.05.31
人工智能·程序人生·ai·c#·程序员创富
周杰伦fans13 小时前
C# 异常继承深度解析:从设计原则到 sealed 关键字的奥秘
java·jvm·c#