اهراز هویت و مدیریت نقش ها در ASP.Net

دوشنبه 25 فروردین 1393

در این مقاله قصد داریم اهراز هویت و مدیریت کاربران را توسط ابزارهای موجود در ToolBox و MemberShip پیاده سازی کنیم

اهراز هویت و مدیریت نقش ها در ASP.Net

سلام دوستان

مرحله اول پیاده سازی و راه اندازی RoleProvider و MemberShip

ویژوال استادیو را باز کرده و یک پروژه جدید ایجاد کنید

در ابتدا باید بانک اطلاعاتی مربوط به کاربران و مدیریت نقش ها ساخته شود

وارد Visual Studio Tools شوید و Visual Studio Command Prompt را اجرا کنید

عبارت aspnet_regsql.exe را تایپ کنید و Enter را بزنید

 

Setup Wizaed باز خواهد شد

 

مرحله اول :

 

Next را کلیک کنید

 

مرحله بعدی :

اطلاعات مربوط به Sql را وارد کنید و کلیک Next را بزنید

مراحل بعدی کلید Next را فشار دهید تا گزینه Finish ظاهر شود

بانک اطلاعاتی مربوطه ساخته شد

قسمت بعدی تنظیمات FormsAuthentication است

تگ زیر را در وب کانفیگ قرار دهید

 

<authentication mode="Forms">
     <forms cookieless="UseCookies" defaultUrl="Default.aspx" 
	loginUrl="Login.aspx" protection="All" timeout="30">
          </forms>
</authentication>  

قسمت بعدی تنظیمات Membership Provider اس

<membership defaultProvider="Demo_MemberShipProvider">
	<providers>
		<add name="Demo_MemberShipProvider"
		    type="System.Web.Security.SqlMembershipProvider"
		    connectionStringName="cnn"
		    enablePasswordRetrieval="false"
		    enablePasswordReset="true"
		    requiresQuestionAndAnswer="true"
		    applicationName="/"
		    requiresUniqueEmail="false"
		    passwordFormat="Hashed"
		    maxInvalidPasswordAttempts="5"
		    minRequiredPasswordLength="5"
		    minRequiredNonalphanumericCharacters="0"
		    passwordAttemptWindow="10" passwordStrengthRegularExpression="">
	</providers>
</membership>

 و قسمت بعدی تنظیمات Role Provider مدیریت نقش ها

<roleManager enabled="true" cacheRolesInCookie="true" 
	cookieName="TBHROLES" defaultProvider="Demo_RoleProvider">
              <providers>
                  <add connectionStringName="dld_connectionstring"
                  applicationName="/" name="Demo_RoleProvider"
                  type="System.Web.Security.SqlRoleProvider, System.Web,
                  Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
             </providers>
</roleManager>

در صفحه ثبت نام یک کنترل CreateUserWizard قرار دهید

در رویداد CreateUserWizard1_CreatedUser کدهای ثبت کاربر را مینویسیم

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
     MembershipCreateStatus p = MembershipCreateStatus.Success;
     Membership.CreateUser(CreateUserWizard1.UserName,  
		CreateUserWizard1.Password, CreateUserWizard1.Email,
     CreateUserWizard1.Question, CreateUserWizard1.Answer, true, out p);
}
protected void CreateUserWizard1_ContinueButtonClick(object sender, EventArgs e)
{
  Response.Redirect("login.aspx");
} 

سپس در صفحه ای با نام Login یک کنترل Login قرار میدهیم و کد های آن به شرح زیر است 

protected void Login1_Authenticate(object sender,AuthenticateEventArgs e)
{
 if (Membership.ValidateUser(Login1.UserName, Login1.Password) == true)
    {
        Login1.Visible = true;
        Session["user"] = User.Identity.Name;
        FormsAuthentication.RedirectFromLoginPage(Login1.UserName, true);
    }
 else
    {
        Response.Write("Invalid Login");
    }
}

برای مدیریت نقش ها صفحه به شکل زیر درست کرده و کدهارا در آن قرار میدهیم

 

Public void createRoles()
{
    try
    {
        if (!Roles.RoleExists(txtrolename.Text))
        {
            Roles.CreateRole(txtrolename.Text);
            BindUsers();
            BindRoles();
            Label1.Text = "Role(s) Created Successfully";
        }
        else
        {
            Label1.Text = "Role(s) Already Exists";
        }
    }
    catch (Exception ex)
    {
        Label1.Text = ex.Message;
    }
}

public void BindRoles()
{
    SqlDataAdapter da = new SqlDataAdapter("select RoleName from aspnet_Roles", cnn);
    DataSet ds = new DataSet();
    da.Fill(ds, "Roles");
    lstRoles.DataSource = ds;
    lstRoles.DataTextField = "RoleName";
    lstRoles.DataValueField = "RoleName";
    lstRoles.DataBind();
}

برای نمایش کاربران هم کدهای زیر استفاده میشود

public void BindUsers()
{
    SqlDataAdapter da = new SqlDataAdapter("select UserName from aspnet_users", cnn);
    DataSet ds = new DataSet();
    da.Fill(ds, "Roles");
    lstusers.DataSource = ds;
    lstusers.DataTextField = "UserName";
    lstRoles.DataValueField = "RoleName";
    lstusers.DataBind();
}

برای نسبت دادن نقشی به کاربر :

private void AssignRoles()
    {
        try
        {
            if (!Roles.IsUserInRole(lstRoles.SelectedItem.Text))
            {
                Roles.AddUserToRole(lstusers.SelectedItem.Text, 
				lstRoles.SelectedItem.Text);
                BindUsers();
                BindRoles();
                Label1.Text = "User Assigned To User Successfully";
            }
            else
            {
                Label1.Text = "Role(s) Already Assigned To User";
            }
        }
        catch (Exception ex)
        {
            Label1.Text = ex.Message;
        }
    }

 

حذف نقش از کاربر :

private void RemoveuserFromRole()
{
    try
    {
        Roles.RemoveUserFromRole(lstusers.SelectedItem.Text, lstRoles.SelectedItem.Text);
        BindUsers();
        BindRoles();
        Label1.Text = "User Is Removed From The Role Successfully";
    }
    catch (Exception ex)
    {
        Label1.Text = ex.Message;
    }
}

حذف نقش :

public void RemoveRole()
{
 try
        {
            Roles.DeleteRole(lstRoles.SelectedItem.Text);
            BindUsers();
            BindRoles();
            Label1.Text = "Role(s) Removed Successfully";
        }
        catch (Exception ex)
        {
            Label1.Text = ex.Message;
        }
}

و برای اهراز هویت و دسرترسی کاربران در فولدر مورد نظر یک وب کانفیگ قرار داده و کد زیر را در آن درج میکنیم

<authorization
        <allow roles ="Admin"/>
        <deny users ="*"/>
</authorization>  

 

این دستور فقط به کاربرانی که نقش Admin دارند اجازه ورود میده

 

 

نمونه هم ضمیمه شده

موفق باشید

 

فایل های ضمیمه

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید