ASP.MVC 基於AuthorizeAttribute許可權設計案例

來源:互聯網
上載者:User

標籤:

     ASP.MVC上實現許可權控制的方法很多,比如使用AuthorizeAttribute這個特性

1.建立自訂特性用於許可權驗證
 public class AuthorizeDiy : AuthorizeAttribute    {        /// <summary>        /// 提供一個入口用於自訂授權檢查        /// </summary>        /// <param name="httpContext"></param>        /// <returns></returns>        protected override bool AuthorizeCore(HttpContextBase httpContext)        {            bool pass = false;            HttpCookie cookie = HttpContext.Current.Request.Cookies["admin"];            if (cookie == null || cookie.Value == null)            {                httpContext.Response.StatusCode = 401;                pass = false;            }            else            {                pass = true;            }            return pass;        }            /// <summary>        /// 處理未能授權的Http請求        /// </summary>        /// <param name="filterContext"></param>        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)        {            base.HandleUnauthorizedRequest(filterContext);            filterContext.HttpContext.Response.Write(filterContext.HttpContext.Response.StatusCode);            if (filterContext.HttpContext.Response.StatusCode == 401)            {                //跳轉到登入介面                filterContext.Result = new RedirectResult("/Login");            }        }         }

重寫2個方法用於驗證處理授權請求和授權失敗。

2.建立控制器基類便於其他控制器繼承
   [AuthorizeDiy]    public class BaseAdminController:Controller    {    }

注意使用自訂特性

3.登入控制器的寫法
    /// <summary>    /// 登入控制器    /// </summary>    public class LoginController : BaseAdminController    {        //        // GET: /Login/        [AllowAnonymous]        public ActionResult Index()        {            return View();        }        [HttpPost]        [AllowAnonymous]        public JsonResult LoginCheck()        {            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(                      1,                      "admin",                      DateTime.Now,                      DateTime.Now.AddDays(1),                      true,                      Newtonsoft.Json.JsonConvert.SerializeObject(new {name="test"}));            string ticString = FormsAuthentication.Encrypt(ticket);            HttpCookie cookie = new HttpCookie("admin", ticString);            Response.Cookies.Add(cookie);            object result = new { success = true };            return this.Json(result);        }    }

注意:繼承基類,並且使用MVC自訂特性進行授權此處只是簡單實現。注意:跳轉登入和驗證登入的2個action必須使用Allowanonymous特性否則登入介面的許可權驗證無法通過會出現重複定向多次的錯誤

4.其他頁面的Demo

登入視圖:

@{    ViewBag.Title = "Index";}<script src="~/Scripts/jquery-1.8.2.min.js"></script><h2>這個是登入介面</h2><form class="formClass">    <button>登入</button></form><script>    $(function ()    {        $(".formClass").submit(function ()        {            $.post("/Login/LoginCheck", {}, function (r) {                alert(JSON.stringify(r));                if (r) {                    location.href = "/Home/Index";                }                else {                    alert("登入失敗");                }            });            return false;        })    })</script>
View Code

主視圖:

@{    ViewBag.Title = "Index";  }<script src="~/Scripts/jquery-1.8.2.min.js"></script><h2>Index</h2><script>    $(function ()    {          })</script>
View Code

首頁控制器:

  public class HomeController : BaseAdminController    {        //        // GET: /Home/        public ActionResult Index()        {            return View();        }    }
View Code5.效果

先正常操作,然後清空緩衝,實現許可權控制效果,MVC路由指向Home控制器的Index

當進入首頁時發現未授權自動跳轉至登入介面

 

ASP.MVC 基於AuthorizeAttribute許可權設計案例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.