8. mvc直接的关系 (过滤器验证是否登录-根据特性返回重定向报文 )
你吧消息给我,我把它分装成一个对象。
==========重定向Json格式===============================================================
using Common.Attributes; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using System.Web; using System.Web.Mvc; namespace MVCOA.Helper { /// <summary> /// 操作上下文 /// </summary> public class OperateContext { const string Admin_CookiePath = "/admin/"; const string Admin_InfoKey = "ainfo"; const string Admin_PermissionKey = "apermission"; const string Admin_TreeString = "aTreeString"; const string Admin_LogicSessionKey = "BLLSession"; #region 3.1 生成 Json 格式的返回值 +ActionResult RedirectAjax(string statu, string msg, object data, string backurl) /// <summary> /// 生成 Json 格式的返回值 /// </summary> /// <param name="statu"></param> /// <param name="msg"></param> /// <param name="data"></param> /// <param name="backurl"></param> /// <returns></returns> public ActionResult RedirectAjax(string statu, string msg, object data, string backurl) { MODEL.FormatModel.AjaxMsgModel ajax = new MODEL.FormatModel.AjaxMsgModel() { Statu = statu, Msg = msg, Data = data, BackUrl = backurl }; JsonResult res = new JsonResult(); res.Data = ajax; return res; } #endregion } }
控制器AdminController
Login登录方法
登录成功后重定向到index页
using MVCOA.Helper; using System; using System.Collections.Generic; using System.Web; using System.Web.Mvc; namespace MVCOA.Login.Admin { /// <summary> /// 管理员登陆等相关业务 /// </summary> public class AdminController : Controller { #region 1.0 管理员登陆页面 +ActionResult Login() /// <summary> /// 1.0 管理员登陆页面 /// </summary> /// <returns></returns> [HttpGet] [Common.Attributes.Skip] public ActionResult Login() { return View(); } #endregion #region 1.0 管理员登陆页面 +ActionResult Login() /// <summary> /// 1.0 管理员登陆页面 /// </summary> /// <returns></returns> [HttpPost] [Common.Attributes.Skip] public ActionResult Login(MODEL.ViewModel.uLoginName UserLogin) {//1.2验证(自己做) if (!ModelState.IsValid) {
return OperateContext.Current.RedirectAjax("err","没有权限!",null,""); } if (OperateContext.Current.LoginModel(UserLogin))//如果true就登录成功 { //ajaxM.Statu = "ok";//Statu状态 //ajaxM.Msg = "登陆成功~";//Msg消息 //ajaxM.BackUrl = "/admin/admin/index"; return OperateContext.Current.RedirectAjax("ok", "登陆成功~", null, "/admin/admin/index"); } else { return OperateContext.Current.RedirectAjax("err", "失败~~!", null,""); } //return Json(ajaxM); } #endregion
==========================================过滤权限=============================
MVCOA.Login.Admin:登录控制器程序集
1.LoginValidateAttribute:过滤器方法(登陆过滤)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MVCOA.Login.Admin.Filter { /// <summary> /// 管理员 身份验证 过滤器 /// </summary> public class LoginValidateAttribute:System.Web.Mvc.AuthorizeAttribute //表示一个特性,特性用于限制调用方操作方法的属性 { #region 1.0 验证方法 - 在 ActionExcuting过滤器之前执行 /// <summary> /// 验证方法 - 在 ActionExcuting过滤器之前执行 /// </summary> /// <param name="filterContext"></param> public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext) { //1.如果请求的 Admin 区域里的 控制器类和方法,那么就要验证权限 if (filterContext.RouteData.DataTokens.Keys.Contains("area")//当前请求匹配的 路由对象中 是否 有 area区域 && filterContext.RouteData.DataTokens["area"].ToString().ToLower() == "admin")//监测区域名 是否为 admin { //2.检查 被请求的 方法 和 控制器是否有 Skip 标签,如果有,则不验证;如果没有,则验证 if (!filterContext.ActionDescriptor.IsDefined(typeof(Common.Attributes.SkipAttribute), false) && !filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(Common.Attributes.SkipAttribute), false)) { #region 1.验证用户是否登陆(Session && Cookie) //1.验证用户是否登陆(Session && Cookie) if (!OperateContext.Current.IsLogin()) { filterContext.Result = OperateContext.Current.Redirect("/admin/admin/login", filterContext.ActionDescriptor);//验证是否登录 } #endregion #region //2.验证登陆用户 是否有访问该页面的权限 else { //2.获取 登陆用户权限 string strAreaName = filterContext.RouteData.DataTokens["area"].ToString().ToLower();//获取区域名 string strContrllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();//获取控制器名 string strActionName = filterContext.ActionDescriptor.ActionName.ToLower();//获取Action方法名 string strHttpMethod = filterContext.HttpContext.Request.HttpMethod;//获取请求方式 if (!OperateContext.Current.HasPemission(strAreaName, strContrllerName, strActionName, strHttpMethod)) { filterContext.Result = OperateContext.Current.Redirect("/admin/admin/login?msg=noPermission", filterContext.ActionDescriptor); } } #endregion } } } #endregion }
OperateContext:上下文类
2.HasPemission方法(是否有权限)
using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MODEL; using System.Web; using System.Web.SessionState; using System.Runtime.Remoting.Messaging; using System.Web.ModelBinding; using System.Web.Mvc; using System.Web.Script.Serialization; using Common.Attributes; namespace MVCOA.Helper { /// <summary> /// 操作上下文 /// </summary> public class OperateContext { #region 0.2 用户权限 +List<MODEL.Ou_Permission> UsrPermission // <summary> /// 用户权限 /// </summary> public List<MODEL.Ou_Permission> UsrPermission { get { return Seesion[Admin_PermissionKey] as List<MODEL.Ou_Permission>; } set { Seesion[Admin_PermissionKey] = value; } } #endregion #region 2.3 判断当前用户 是否有 访问当前页面的权限 +bool HasPemission /// <summary> /// 2.3 判断当前用户 是否有 访问当前页面的权限 /// </summary> /// <param name="areaName">区域名</param> /// <param name="controllerName">控制器名</param> /// <param name="actionName">控制器action方法名</param> /// <param name="httpMethod">请求方式1:get,2:post</param> /// <returns></returns> public bool HasPemission(string areaName, string controllerName, string actionName, string httpMethod) { //查询权限表访问权限 //StringComparison.CurrentCultureIgnoreCase:忽略比较的大小写 var listP = from per in UsrPermission where string.Equals(per.pAreaName, areaName, StringComparison.CurrentCultureIgnoreCase) && string.Equals(per.pControllerName, controllerName, StringComparison.CurrentCultureIgnoreCase) && string.Equals(per.pActionName, actionName, StringComparison.CurrentCultureIgnoreCase) && per.pFormMethod == (httpMethod.ToLower() == "get" ? 1 : 2) select per; return listP.Count() > 0;//大于0说明有权限 } #endregion #region 2.0 管理员方式登录+ bool LoginModel(MODEL.ViewModel.uLoginName ModeLogin) public bool LoginModel(MODEL.ViewModel.uLoginName ModeLogin) { //1.3通过操作上下文获取 用户业务接口对象,调用里面的登陆方法! //BLLSession//数据仓储 //到业务层查询,查到true,如果没查到返回false MODEL.Ou_UserInfo usr = OperateContext.Current.BLLSession.IOu_UserInfoBLL.Login(ModeLogin.LoginNames, ModeLogin.uPwd3);//扩展登录Login if (usr != null) { //2.1保存 用户数据(Session or Coookie)//为了安全考虑, MODEL.Ou_UserInfo代理类,改成真正的实体。再存入Cookie Usr = usr;//存入Usr对象 if (!ModeLogin.isAllway)//如果选择了复选框,则使用cookie保存数据,要加密 { //2.1.2将用户id加密成字符串 string strCookieValue = Common.SecurityHelper.EncryptUserInfo(usr.uId.ToString());//调用票据加密 //2.1.3创建cookie HttpCookie cookie = new HttpCookie(Admin_InfoKey, strCookieValue);//用户id存入Cookie cookie.Path = Admin_CookiePath;// "/admin/"; cookie.Expires = DateTime.Now.AddDays(1);//失效时间是一天 Response.Cookies.Add(cookie);//发回去 } //2.2查询当前用户的权限,并将权限存入 Session================= //List<MODEL.Ou_Permission> listPermission = MVCOA.Helper.OperateContext.GetUserPermission(usr.uId);//usr.uId是用户id //存入Session对象================= UsrPermission =OperateContext.Current.GetUserPermission(usr.uId); return true; }
App_Start
FilterConfig //过滤配置类 :必须的
3. filters.Add(new Login.Admin.Filter.LoginValidateAttribute());//使用管理员 身份验证 过滤器
using System.Web; using System.Web.Mvc; namespace MVCOA { public class FilterConfig //过滤配置 { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new Login.Admin.Filters.LoginValidateAttribute());//使用管理员 身份验证 过滤器,调用过滤方法LoginValidateAttribute()
} } }
===========================登录过滤2,过滤配置添加=========================================
1. 跳过顾虑 [Common.Attributes.Skip]
2.LoginModel(UserLogin)实体扩展登陆方法,不是ef代理类。所以比较安全。
3.Login(MODEL.ViewModel.uLoginName UserLogin) //这个是扩展实体登陆,不是代理类。
4.bool HasPemission(string areaName, string controllerName, string actionName, string httpMethod)过滤权限有点问题,返回值listP.Count()>0; //这里有点问题,不知什么问题,
暂时改成:return listP.Count()>0;
5.**在App_stata
FilterConfig //过滤配置类 :必须的
3. filters.Add(new Login.Admin.Filter.LoginValidateAttribute());//使用管理员 身份验证 过滤器
using Common.Attributes; using MVCOA.Helper; using System; using System.Collections.Generic; using System.Web; using System.Web.Mvc; namespace MVCOA.Login.Admin { /// <summary> /// 管理员登陆等相关业务 /// </summary> public class AdminController : Controller { #region 1.0 管理员登陆页面 +ActionResult Login() /// <summary> /// 1.0 管理员登陆页面 /// </summary> /// <returns></returns> [HttpGet] [Common.Attributes.Skip] public ActionResult Login() { return View(); } #endregion #region 1.0 管理员登陆页面 +ActionResult Login() /// <summary> /// 1.0 管理员登陆页面 /// </summary> /// <returns></returns> [HttpPost] [Common.Attributes.Skip]//有skip标签表示跳过过滤 public ActionResult Login(MODEL.ViewModel.uLoginName UserLogin) { //MODEL.FormatModel.AjaxMsgModel ajaxM = new MODEL.FormatModel.AjaxMsgModel() { Statu = "err", Msg = "失败~~!" }; //1.2验证(自己做) if (!ModelState.IsValid) { return OperateContext.Current.RedirectAjax("err", "没有权限!", null, ""); } if (OperateContext.Current.LoginModel(UserLogin))//如果true就登录成功 //LoginModel是扩展登陆实体方法,安全 { //ajaxM.Statu = "ok";//Statu状态 //ajaxM.Msg = "登陆成功~";//Msg消息 //ajaxM.BackUrl = "/admin/admin/index"; return OperateContext.Current.RedirectAjax("ok", "登陆成功~", null, "/admin/admin/index"); } else { return OperateContext.Current.RedirectAjax("err", "失败~~!", null,""); } //return Json(ajaxM); } #endregion #region 2.0 显示管理首页+ ActionResult Index() /// <summary> /// /// <summary> /// 2.0 显示管理首页 /// </summary> /// <returns></returns> /// </summary> /// <returns></returns> public ActionResult Index() { return View(); } #endregion #region 3.0 根据当前登陆用户 权限 生成菜单 +GetMenuData() /// <summary> /// 根据当前登陆用户 权限生成菜单 /// </summary> /// <returns></returns> [AjaxRequest] public ActionResult GetMenuData() { return Content(OperateContext.Current.UserTreeJsonStr); } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MODEL; using System.Web; using System.Web.SessionState; using System.Runtime.Remoting.Messaging; using System.Web.ModelBinding; using System.Web.Mvc; using System.Web.Script.Serialization; using Common.Attributes; namespace MVCOA.Helper { /// <summary> /// 操作上下文 /// </summary> public class OperateContext { //常量本质是静态变量,编译的时候会被替换掉 const string Admin_CookiePath = "/admin/"; const string Admin_InfoKey = "ainfo";//存session,cookie const string Admin_PermissionKey = "apermission";//用于存储用户权限 const string Admin_TreeString = "aTreeString"; const string Admin_LogicSessionkey = "BLLSession"; #region 0.1http上下文+Http上下文 及 相关属性 /// <summary> /// http上下文 /// </summary> public static HttpContext Context { get { return HttpContext.Current; } } /// <summary> /// http上下文 /// </summary> HttpResponse Response { get { return Context.Response; } } HttpRequest Request { get { return Context.Request; } } HttpSessionState Seesion { get { return Context.Session; } } #endregion #region 0.2 当前用户+MODEL.Ou_UserInfo Usr /// <summary> /// 当前用户对象 /// </summary> public MODEL.Ou_UserInfo Usr { get { return Seesion[Admin_InfoKey] as MODEL.Ou_UserInfo;}//获取 set { Seesion[Admin_InfoKey]=value; }//存 } #endregion #region 0.2 用户权限 +List<MODEL.Ou_Permission> UsrPermission // <summary> /// 用户权限 /// </summary> public List<MODEL.Ou_Permission> UsrPermission { get { return Seesion[Admin_PermissionKey] as List<MODEL.Ou_Permission>; } set { Seesion[Admin_PermissionKey] = value; } } #endregion #region 0.3业务仓储+IBLL.IBLLSession BLLSession; /// <summary> /// 业务仓储----------------IBLL.IBLLSession仓储接口; DI.SpringHelper.GetObject<T>()//Spring.Net上下文容器(工厂) /// </summary> public IBLL.IBLLSession BLLSession ; #endregion #region 0.2实例构造函数 初始化 业务仓储 public OperateContext() { BLLSession = DI.SpringHelper.GetObject<IBLL.IBLLSession>("BLLSession"); } #endregion #region 1.0 当前操作上下文+ static OperateContext Current /// <summary> /// 获取当前 静态操作上下文(从当前服务器处理线程中获取 上下文),针对一个请求,我有一个单独的操作上下文对象。 /// </summary> public static OperateContext Current { get { OperateContext oContext = CallContext.GetData(typeof(OperateContext).Name) as OperateContext; if (oContext == null)//如果是null,创建 { oContext = new OperateContext(); CallContext.SetData(typeof(OperateContext).Name, oContext);//放回 } return oContext; } } #endregion //================2.0登录权限 等系统操作============================================ #region 2.0根据用户id查询用户权限+List<MODEL.Ou_Permission> GetUserPermission(int usrId) public List<MODEL.Ou_Permission> GetUserPermission(int usrId) //在2.0登录会调用 bool LoginModel(MODEL.ViewModel.uLoginName ModeLogin) { //-------A.根据用户角色查询 //1.0 根据用户 id 查到 该用户的 角色id List<int> listRoleId = Current.BLLSession.IOu_UserRoleBLL.GetListBy(ur => ur.urUId == usrId).Select(ur => ur.urRId).ToList(); //2.0 根据角色 id 查询角色权限 id List<int> listPerIds = Current.BLLSession.IOu_RolePermissionBLL.GetListBy(rp => listRoleId.Contains(rp.rpRId)).Select(rp => rp.rpPId).ToList(); //3.0 查询所有角色数据 List<MODEL.Ou_Permission> listPermission = Current.BLLSession.IOu_PermissionBLL.GetListBy(p => listPerIds.Contains(p.pid)).Select(p => p.ToPOCO()).ToList(); //-------B.根据用户特权查询 //b.1 查询 用户特权id List<int> vipPerIds = Current.BLLSession.IOu_UserVipPermissionBLL.GetListBy(vip => vip.vipUserId == usrId).Select(vip => vip.vipPermission).ToList(); //b.2 查询 特权数据 List<MODEL.Ou_Permission> listPermission2 = Current.BLLSession.IOu_PermissionBLL.GetListBy(p => vipPerIds.Contains(p.pid)).Select(p => p.ToPOCO()).ToList(); //-------C.将两个权限集合 合并(将集合2的权限数据 添加到 集合1中) listPermission2.ForEach(p => { listPermission.Add(p); }); return listPermission.OrderBy(u => u.pOrder).ToList(); } #endregion #region 2.0 管理员方式登录+ bool LoginModel(MODEL.ViewModel.uLoginName ModeLogin) public bool LoginModel(MODEL.ViewModel.uLoginName ModeLogin) { //1.3通过操作上下文获取 用户业务接口对象,调用里面的登陆方法! //BLLSession//数据仓储 //到业务层查询,查到true,如果没查到返回false MODEL.Ou_UserInfo usr = OperateContext.Current.BLLSession.IOu_UserInfoBLL.Login(ModeLogin.LoginNames, ModeLogin.uPwd3);//扩展登录Login if (usr != null) { //2.1保存 用户数据(Session or Coookie)//为了安全考虑, MODEL.Ou_UserInfo代理类,改成真正的实体。再存入Cookie Usr = usr;//存入Usr对象 if (!ModeLogin.isAllway)//如果选择了复选框,则使用cookie保存数据,要加密 { //2.1.2将用户id加密成字符串 string strCookieValue = Common.SecurityHelper.EncryptUserInfo(usr.uId.ToString());//调用票据加密 //2.1.3创建cookie HttpCookie cookie = new HttpCookie(Admin_InfoKey, strCookieValue);//用户id存入Cookie cookie.Path = Admin_CookiePath;// "/admin/"; cookie.Expires = DateTime.Now.AddDays(1);//失效时间是一天 Response.Cookies.Add(cookie);//发回去 } //2.2查询当前用户的权限,并将权限存入 Session================= //List<MODEL.Ou_Permission> listPermission = MVCOA.Helper.OperateContext.GetUserPermission(usr.uId);//usr.uId是用户id //存入Session对象================= UsrPermission =OperateContext.Current.GetUserPermission(usr.uId);//GetUserPermission用户权限查询 return true; } return false; } #endregion #region 2.2 判断当前用户是否登陆 +bool IsLogin() /// <summary> /// 判断当前用户是否登陆 而且 /// </summary> /// <returns></returns> public bool IsLogin() { //1.验证用户是否登陆(Session && Cookie) if (Seesion[Admin_InfoKey] == null) { if (Request.Cookies[Admin_InfoKey] == null) { //重新登陆,内部已经调用了 Response.End(),后面的代码都不执行了! (注意:如果Ajax请求,此处不合适!) //filterContext.HttpContext.Response.Redirect("/admin/admin/login"); return false; } else//如果有cookie则从cookie中获取用户id并查询相关数据存入 Session { string strUserInfo = Request.Cookies[Admin_InfoKey].Value; strUserInfo = Common.SecurityHelper.DecryptUserInfo(strUserInfo); int userId = int.Parse(strUserInfo); MODEL.Ou_UserInfo usr = BLLSession.IOu_UserInfoBLL.GetListBy(u => u.uId == userId).First(); Usr = usr; UsrPermission = OperateContext.Current.GetUserPermission(usr.uId);//GetUserPermission用户权限查询 } } return true; } #endregion #region 2.3 判断当前用户 是否有 访问当前页面的权限 +bool HasPemission /// <summary> /// 2.3 判断当前用户 是否有 访问当前页面的权限 /// </summary> /// <param name="areaName"></param> /// <param name="controllerName"></param> /// <param name="actionName"></param> /// <param name="httpMethod"></param> /// <returns></returns> public bool HasPemission(string areaName, string controllerName, string actionName, string httpMethod) { //查询权限表(areaName:区域名; controllerName:控制器名; actionName:控制器Action方法名;httpMethod:请求方式:1Get,2Post) var listP = from per in UsrPermission where string.Equals(per.pAreaName, areaName, StringComparison.CurrentCultureIgnoreCase) && string.Equals(per.pControllerName, controllerName, StringComparison.CurrentCultureIgnoreCase) && string.Equals(per.pActionName, actionName, StringComparison.CurrentCultureIgnoreCase) && //string.Equals(per.pFormMethod.ToString(),(httpMethod.ToLower()=="get"?1:2).ToString(),StringComparison.CurrentCultureIgnoreCase) per.pFormMethod == (httpMethod.ToLower() == "get" ? 1 : 2) select per; return listP.Count()>0; //这里有点问题,不知什么问题,暂时改成:return listP.Count()> } #endregion #region 2.4获取当前登陆用户的权限树Json字符串+string UserTreeJsonStr /// <summary> /// 获取当前登陆用户的权限树Json字符串 /// </summary> public string UserTreeJsonStr { //3.1 从Session中获取权限 get { if (Seesion[Admin_TreeString] == null) { //将登录用户 权限集合 转成树节点 集合(IsShow = false的不要生成到树节点集合中) List<MODEL.EasyUIModel.TreeNode> listTree = MODEL.Ou_Permission.ToTreenodes(UsrPermission.Where(p => p.pIsShow == true).ToList()); Seesion[Admin_TreeString] = Common.DBhelperD5.Obj2Json(listTree);//listTree转成json格式 } return Seesion[Admin_TreeString].ToString(); } } #endregion //=====================公用操作方法======================================================= #region 3.1生成Json格式的返回值+ActionResult RedirectAjax(string statu, string msg, object data, string backurl) /// <summary> /// 生成Json格式的返回值 /// </summary> /// <param name="statu"></param> /// <param name="msg"></param> /// <param name="data"></param> /// <param name="backurl"></param> /// <returns></returns> public ActionResult RedirectAjax(string statu, string msg, object data, string backurl) { MODEL.FormatModel.AjaxMsgModel ajax = new MODEL.FormatModel.AjaxMsgModel() { Statu = statu, Msg = msg, Data = data, BackUrl = backurl }; JsonResult res = new JsonResult(); res.Data = ajax; return res; } #endregion #region 3.2 重定向方法 根据Action方法特性 +ActionResult Redirect(string url, ActionDescriptor action) /// <summary> /// 重定向方法 有两种情况:如果是Ajax请求,则返回 Json字符串;如果是普通请求,则 返回重定向命令 /// </summary> /// <returns></returns> public ActionResult Redirect(string url, ActionDescriptor action) { //如果Ajax请求没有权限,就返回 Json消息 if (action.IsDefined(typeof(AjaxRequestAttribute), false) || action.ControllerDescriptor.IsDefined(typeof(AjaxRequestAttribute), false)) { return RedirectAjax("nologin","您没有登陆或没有权限访问此页面~~", null, url); } else//如果 超链接或表单 没有权限访问,则返回 302重定向命令 { return new RedirectResult(url); } } #endregion } }
过滤验证用户登陆
using MVCOA.Helper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MVCOA.Login.Admin.Filters { /// <summary> /// 管理员 身份验证 过滤器 /// </summary> public class LoginValidateAttribute:System.Web.Mvc.AuthorizeAttribute //表示一个特性,特性用于限制调用方操作方法的属性 { #region 1.0 验证方法 - 在 ActionExcuting过滤器之前执行 /// <summary> /// 验证方法 - 在 ActionExcuting过滤器之前执行 /// </summary> /// <param name="filterContext"></param> public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext) { //1.如果请求的 Admin 区域里的 控制器类和方法,那么就要验证权限 if (filterContext.RouteData.DataTokens.Keys.Contains("area")//当前请求匹配的 路由对象中 是否 有 area区域 && filterContext.RouteData.DataTokens["area"].ToString().ToLower() == "admin")//监测区域名 是否为 admin { //2.检查 被请求的 方法 和 控制器是否有 Skip 标签,如果有,则不验证;如果没有,则验证 if (!filterContext.ActionDescriptor.IsDefined(typeof(Common.Attributes.SkipAttribute), false) && !filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(Common.Attributes.SkipAttribute), false)) { #region 1.验证用户是否登陆(Session && Cookie) //1.验证用户是否登陆(Session && Cookie) if (!OperateContext.Current.IsLogin()) { filterContext.Result = OperateContext.Current.Redirect("/admin/admin/Login", filterContext.ActionDescriptor); } #endregion #region //2.验证登陆用户 是否有访问该页面的权限 else { //2.获取 登陆用户权限 string strAreaName = filterContext.RouteData.DataTokens["area"].ToString().ToLower(); string strContrllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower(); string strActionName = filterContext.ActionDescriptor.ActionName.ToLower(); string strHttpMethod = filterContext.HttpContext.Request.HttpMethod; //HasPemission是否有权限。 if (!OperateContext.Current.HasPemission(strAreaName, strContrllerName, strActionName, strHttpMethod)) { filterContext.Result = OperateContext.Current.Redirect("/admin/admin/login?msg=noPermission", filterContext.ActionDescriptor); } } #endregion } } } #endregion } }
***********(登陆)过滤配置 APP_start
FilterConfig.cs
using System.Web; using System.Web.Mvc; namespace MVCOA { public class FilterConfig //过滤配置 { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new Login.Admin.Filters.LoginValidateAttribute());//使用管理员 身份验证 过滤器 } } }
运行结果:


浙公网安备 33010602011771号