標籤:
一、使用ActionFilterAttribute實現許可權管理
1、建立一個菜單過濾器類
//構建一個許可權菜單過濾器 public class MvcMenuFilter : ActionFilterAttribute { private bool _isEnable = true;//是否開啟過濾 public MvcMenuFilter() { _isEnable = true; }//建構函式1,預設開啟 public MvcMenuFilter(bool IsEnable) { _isEnable = IsEnable; }//建構函式2,指定是否開啟 //重寫OnActionExecuting public override void OnActionExecuting(ActionExecutingContext filterContext) { if (_isEnable)//如果開啟過濾 { //擷取當前執行的地址 var route = filterContext.RouteData.Values; var url = string.Format("/{0}/{1}/{2}", route["area"], route["controller"], route["action"]); //訪問資料庫,檢查目前使用者是否有此許可權 if (!new sys_userService().AuthorizeUserMenu(url)) filterContext.Result = new ContentResult() { Content = "你沒有訪問此功能的許可權,請聯絡管理員!" }; } //執行訪問 base.OnActionExecuting(filterContext); } }
2、在過濾器設定檔中加入這個過濾器,那麼所有Action都會經過這個過濾器
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new MvcHandleErrorAttribute()); //filters.Add(new System.Web.Mvc.AuthorizeAttribute()); //filters.Add(new MvcDisposeFilter()); filters.Add(new MvcMenuFilter());//加入許可權菜單過濾器 } }
3、設定檔web.config中在<system.web>中加入以下節點,驗證失敗跳到該地址去
參考內容:https://msdn.microsoft.com/zh-cn/library/532aee0e.aspx
問題:這個和上面的提示是否衝突
<authentication mode="Forms"> <forms loginUrl="~/Login" timeout="2880" /> </authentication>
【從零開始構建一個MVC+Log4net+KnockOut+EasyUI+FluentData+SQLite的架構】X、登入模組的實現