asp.Netmvcコントローラ&動作方法ロール権限検証
4482 ワード
環境:Visual Studio Community 2015 Asp.net MVC5
ステップ1:プロジェクトルートディレクトリのWebをチェックする.configのsystem.Webノードに次のノードがあるかどうかは、loginUrl="~/ACcount/LOgin"を追加して現在のユーザが動作方法やコントローラにアクセスできないことを示す場合、自動的にAccountコントローラにリダイレクトされるLoginメソッド
ステップ2:プロジェクトルートディレクトリのGlobal.asaxには、システム検証コントローラまたはアクションメソッドのアクセス時に追加のロール検証を行うためのMvcApplication構築メソッドが含まれています.
ステップ3:ログインが通過したら、次の方法を呼び出します.クッキーにロールを書き込みます.最初のパラメータuserNameは、現在のログインユーザーを一意に識別できるId値を指します.2番目のパラメータroleNameは、現在のユーザーのロールを指します.たとえばadmin(管理者)です.
ステップ4:動作方法またはコントローラに以下の特性を加えると、この検証が実現され、ステップ2のおかげで実現されます.
または
ステップ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")]