初心者が一番使いやすいASPについてNETロールベースフォームセキュリティ認証メカニズムDemo


第一歩:データベース構築テーブルテスト用(以下のコードは直接copyでt-sqlで生成すればよい)
Create DATABASE WebSolution
GO
USE [WebSolution]
GO
/******   :  Table [dbo].[Users]        : 04/07/2016 15:16:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Users](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[Password] [nvarchar](150) COLLATE Chinese_PRC_CI_AS NULL,
[UserRoles] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,
 CONSTRAINT [PK__Users__00551192] PRIMARY KEY CLUSTERED 
(
[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

ステップ2:コードの作成
空のソリューションを作成し、Webアプリケーションを追加します.アプリケーションの下にloginがあります.aspx、default.aspx、webForm1、Global.aspx、Webconfig
次の図を示します.
login.aspxページbutton 1_Clickイベントコードは次のとおりです.
string strcon = "Data Source=.;Initial Catalog=WebSolution;Persist Security Info=True;User ID=sa;Password=123;";
        protected void Button1_Click(object sender, EventArgs e)
        {
            FormsAuthentication.Initialize();

            SqlConnection conn = new SqlConnection(strcon);
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select UserRoles from Users where userName=@username" +" and Password=@password ";
            cmd.Parameters.Add("@username", SqlDbType.NVarChar, 100).Value = this.TextBox1.Text;
            cmd.Parameters.Add("@password", SqlDbType.NVarChar, 150).Value = FormsAuthentication.HashPasswordForStoringInConfigFile(this.TextBox2.Text, "md5");
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.Read())
            {
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.TextBox1.Text.ToString(), DateTime.Now, DateTime.Now.AddMinutes(1), true, reader.GetString(0), FormsAuthentication.FormsCookiePath);
                string strticket = FormsAuthentication.Encrypt(ticket);
                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strticket);
                if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;
                Response.Cookies.Add(cookie);
                string returnUrl = Request.QueryString["ReturnUrl"];
                if (returnUrl == null)
                {
                    returnUrl = "./";
                }
                Response.Redirect(returnUrl);
                this.Label3.Text = "    ";
            }
            else
            {
                this.Label3.Text = "         ,   !";
            }
            reader.Close();
            conn.Close();
        }
</span>

defalt.aspx Page_Loadイベントコードは次のとおりです.
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (User.IsInRole("Administrator"))
                {
                    Response.Write("     ");
                }
                else if (User.IsInRole("User"))
                {
                    Response.Write("    ");
                }
            }
        }

ステップ3:構成
Globalを変更する必要があります.aspxファイル.Webアプリケーションにこのファイルがない場合は、Webアプリケーションを右クリックして「追加」>「新規の追加」>「Global Application Class」を選択します.GlobalでaspxまたはGlobal.aspx.csで、Application_を見つけます.AuthenticationRequestの方法.まず、システムを交換または使用することを確認する.Security.PrincipalおよびSystem.Web.Securityネーミングスペース、それからそれを修正して、修正したコード:
protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
{
    if (HttpContext.Current.User != null)
    {
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            if (HttpContext.Current.User.Identity is FormsIdentity)
            {
                FormsIdentity id =
                    (FormsIdentity)HttpContext.Current.User.Identity;
                    FormsAuthenticationTicket ticket = id.Ticket;
                //             ,            
                string userData = ticket.UserData;
                string[] roles = userData.Split(',');
                HttpContext.Current.User = new GenericPrincipal(id, roles);
            }
        }
    }
}

次に、Webアプリケーションのルートディレクトリの下にあるWeb.configファイルにノードの下の
,これを   
次に、Admin、Userフォルダの下にwebconfigプロファイルを1つずつ追加します.
Adminファイルの下ノード挿入コードは以下の通りです:Userファイルの下ノード挿入コードは以下の通りです:次に、ユーザーのロール権限をテストするために2つのフォルダにそれぞれいくつかの画像を追加し、コードがほぼ完了しました.
ステップ4:テスト
•テストユーザ名パスワードは(ユーザ名:adminパスワード:pwd 123権限:管理者)(ユーザ名:lisaaiパスワード:pwd 123権限:一般会員)