asp.Netmvcコントローラ&動作方法ロール権限検証

4482 ワード

環境:Visual Studio Community 2015 Asp.net MVC5
ステップ1:プロジェクトルートディレクトリのWebをチェックする.configのsystem.Webノードに次のノードがあるかどうかは、loginUrl="~/ACcount/LOgin"を追加して現在のユーザが動作方法やコントローラにアクセスできないことを示す場合、自動的にAccountコントローラにリダイレクトされるLoginメソッド
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2800" />
    authentication>

ステップ2:プロジェクトルートディレクトリのGlobal.asaxには、システム検証コントローラまたはアクションメソッドのアクセス時に追加のロール検証を行うためのMvcApplication構築メソッドが含まれています.
        public MvcApplication()
        {
            AuthorizeRequest += new EventHandler(ApplicationAuthenticateRequest);
        }

        protected void ApplicationAuthenticateRequest(Object sender, EventArgs e)
        {
            HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie == null || authCookie.Value == "")
            {
                return;
            }
            FormsAuthenticationTicket authTicket = null;
            try
            {
                authTicket = FormsAuthentication.Decrypt(authCookie.Value);
            }
            catch
            {
                return;
            }
            string[] roles = authTicket.UserData.Split(new char[] { ',' });
            if (Context.User != null)
            {
                Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles);
            }
        }

ステップ3:ログインが通過したら、次の方法を呼び出します.クッキーにロールを書き込みます.最初のパラメータuserNameは、現在のログインユーザーを一意に識別できるId値を指します.2番目のパラメータroleNameは、現在のユーザーのロールを指します.たとえばadmin(管理者)です.
        private void SetAuthCookie(string userName, string roleName)
        {
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(10), false, roleName);
            string encryptTicket = FormsAuthentication.Encrypt(ticket);
            System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptTicket);
            System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
        }

ステップ4:動作方法またはコントローラに以下の特性を加えると、この検証が実現され、ステップ2のおかげで実現されます.
   //        admin        
   [Authorize(Roles = "admin")]

または
   //      admin   normal       
   [Authorize(Roles = "admin,normal")]