صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 67

نام تاپیک: آموزشی + ساخت لاگین

  1. #1

    آموزشی + ساخت لاگین

    دوستان من هر چی گشتم بحث بدرد بخوری در رابطه با ساخت لاگین پیدا نکردم بیایین اینجا با هم بسازیم

    1.لاگین به سایت
    2.ثبت نام در سایت
    3.بازیابی رمز عبور
    4.تغییر رمز عبور

    البته از چند نفری سوال کردم در این مورد از دوستان سایت برنامه نویس!((البته اگه تکراری هست و بحثی هست بگید من سریعاً پاک میکنم)) من چیزی ندیدم باشه

    ابتدا پایگاه داده اونا تعریف کنیم هرجا اشتباه میکنم بگید تا ی چیز کامل درست بشه!

    من فک میکنم دوتا Tabel می خواد که یکی برای مشخصات افراد و یکی برای نقش ها!

    Tabel مشخصات : Id,UserName,Pass,Name,Family,Question,Answer,Email
    و احیاناً فیلد های مورد نیاز دیگر
    Tabel نقش ها : Id,Name,Rull

    دوستان نظر بدن با ادامه اگه چیزی میدونند!

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    کرج
    پست
    495

    نقل قول: آموزشی + ساخت لاگین

    سلام موضوع ساخت لاگین خوب یه چیز معلومه که قبلا بحثش زیاد مطرح شده، اما بیشتر بحث سر چک کردن Role افراد هنگام دسترسی به صفحات خاص هست
    اینکه آیا Role رو در یک Session نگه داریم بعد سعی کنیم Session رو امن کنیم؟
    یا اینکه از روش های دیگه مثل ایجاد یه جدول برای نگه داشتن Role افرادی که در حال حاضر لاگین کرده اند استفاده بشه ؟
    درباره این روش ها بحث زیاد شده اما آخرش ما به نتیجه مشخصی نرسیدیم

  3. #3
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

    نقل قول: آموزشی + ساخت لاگین

    بهترین راه برای کنترل کردن کاربران و Role ها استفاده از RoleProvider خود Asp.net می باشد .

  4. #4
    کاربر دائمی آواتار sam166
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    ???????
    پست
    508

    نقل قول: آموزشی + ساخت لاگین

    این بحث ها همه در تاپیک های دیگه ای مطرح شده و به نتیجه رسیده ولی نه نتیجه خیلی خوب
    بیایید از اول یک ساختار کلی برای لاگین و بقیه مسائل مربوطش مطرح کنیم و شروع به کار کنیم
    که اگر فرد تازه واردی وارد این مبحث شد خوشحال بشه و کارش راه بیفته.
    اینم نظر بنده بود .حالا ببینیم بقیه اساتید چی میگن

  5. #5
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359
    نقل قول نوشته شده توسط Mohandes2009 مشاهده تاپیک
    من فک میکنم دوتا Tabel می خواد که یکی برای مشخصات افراد و یکی برای نقش ها!

    Tabel مشخصات : Id,UserName,Pass,Name,Family,Question,Answer,Email
    و احیاناً فیلد های مورد نیاز دیگر
    Tabel نقش ها : Id,Name,Rull

    دوستان نظر بدن با ادامه اگه چیزی میدونند!
    خوب بذارین اول جداول را اصلاح کنیم .
    اگه بخواهیم یک ساختار ساده درست کنیم به جداول زیر احتیاج داریم:
    جدول Role :
    RoleID , RoleName ,RoleDesc

    جدول User :
    UserID , Username ,UserPass , UserEmail ,RoleID, Name , Family ,PasswordQuestion , PasswordAnsware , IsApprove , status, RegisterDate , LastLoginDate


    UserID= شماره کاربر
    Username = نام کاربری
    UserPass = رمز کاربری
    UserEmail = ایمیل کاربر
    RoleID = شماره Role کاربر از جدول Role ها
    Name = نام
    Family = فامیلی
    PasswordQuestion = سوال امنیتی
    PasswordAnsware = پاسخ سوال امنیتی
    IsApprove = تایید شده
    status = فعال یا غیر فعال کردن کاربر
    RegisterDate = تاریخ عضویت کاربر
    LastLoginDate = تاریخ آخرین ورود کاربر به سیستم

    RoleDesc توضیحی درباره اون Role خاص می باشد

    درمورد Role Provider هم در این تاپیک و نحوه استفاده از اون رو می گم ولی ابتدا بذارید عضویت کامل شود دوباره Role Provider هم تو login گفته میشه.

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

    فرض کنید بر اساس جدولمون چنین فرمی رو آماده می کنیم



    بعد اینکه کاربر فرم را پر کرد و دکمه Create User رو Click کرد حالا کد زیر رو می نویسیم

    //Hash Password
    string HashPassword = FormsAuthentication.HashPasswordForStoringInConfig File(Password.Text, "MD5");

    //Insert Data in Database
    //after Insert data in Database you can login User

    FormsAuthentication.SetAuthCookie(UserName.Text, false /* createPersistentCookie */);


    اولین کاری یکه می کنیم اینه که رمز عبور کاربر را کد می کنیم برای این کار من MDF رو پیشنهاد میدم چون غیر قابل بازگشته و شکسته نمیشه یعنی هر دفعه شما وقتی یک کلمه رو به MD5 تبدیل می کنید , همون عبارت می شود ولی غیر قابل بازگشته

    از اونجایی که کاربر رمز عبور خود را می داند در هر ورود به سایت رمز عبور وارد شده توسط کاربر با این الگوریتم (MD5) کد می شود و با نمونه موجود در Database مقایسه می شود

    و اگر کاربر رمز عبور خود را فراموش کند شما باید رمز عبور جدیدی جایگزین قبلی کنید و نمی توانید رمز عبور را به هیچ عنوان بازیابی کنید

    بعد اینکه کاربر به Database اضافه شد می تونید از این متد کلاس FormsAuthentication برای login کردنش در سیستم استفاده کنید .

    اولین پارامتر آن نام کاربر و پارامتر دوم آن یک مقدار bool است که آیا کاربر را به خاطر بسپارد یا نه ؟؟

    برای استفاده از کلاس FormsAuthentication باید یکسری تغییرات در فایل web.config پروژه هم بدید

    <authentication mode="Forms">
    <forms name=".Authenticationmysite" loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" slidingExpiration="true" timeout="43200">
    </forms>
    </authentication>
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله raziee : یک شنبه 18 دی 1390 در 00:25 صبح دلیل: ادغام کردن پست ها

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    کرج
    پست
    495

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط z_bluestar مشاهده تاپیک
    بهترین راه برای کنترل کردن کاربران و Role ها استفاده از RoleProvider خود ASP.NET می باشد .
    می شه لطفا درباه RoleProvider بیشتر توضیح بدید؟ آخه یکی از اساتید ما هم گفته بود که بهتره از سیستم لاگین خود .Net استفاده کنید(که متاسفانه ترم تمام شد و ...)

  7. #7
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    148

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط fa_karoon مشاهده تاپیک
    می شه لطفا درباه RoleProvider بیشتر توضیح بدید؟ آخه یکی از اساتید ما هم گفته بود که بهتره از سیستم لاگین خود .Net استفاده کنید(که متاسفانه ترم تمام شد و ...)
    این پست رو بخون
    https://barnamenevis.org/showth...=254874&page=2

  8. #8
    VIP آواتار raziee
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    سن
    35
    پست
    2,208
    وستان من هر چی گشتم بحث بدرد بخوری در رابطه با ساخت لاگین پیدا نکردم بیایین اینجا با هم بسازیم

    1.لاگین به سایت
    2.ثبت نام در سایت
    3.بازیابی رمز عبور
    4.تغییر رمز عبور

    البته از چند نفری سوال کردم در این مورد از دوستان سایت برنامه نویس!((البته اگه تکراری هست و بحثی هست بگید من سریعاً پاک میکنم)) من چیزی ندیدم باشه

    ابتدا پایگاه داده اونا تعریف کنیم هرجا اشتباه میکنم بگید تا ی چیز کامل درست بشه!

    من فک میکنم دوتا Tabel می خواد که یکی برای مشخصات افراد و یکی برای نقش ها!

    Tabel مشخصات : Id,UserName,Pass,Name,Family,Question,Answer,Email
    و احیاناً فیلد های مورد نیاز دیگر
    Tabel نقش ها : Id,Name,Rull

    دوستان نظر بدن با ادامه اگه چیزی میدونند!
    بهترین راه استفاده از Membership خود دات نت هست.
    البته نه دقیقا خود Membership دات نت ، بلکه در واقع بهترین راه توسعه ی Membership بر اساس نیاز/تجربه/دانش فردی و استفاده از اون.

    مشکل لاگینش نیستا امنیتشه ...
    کی گفته برادر؟

    چگونه میشود لاگین بدون کنترل های asp انجام داد و امنیت کامل برقرار کرد
    ببین این کد ها بدردت میخوره؟
    protected void btnLogin_Click(object sender, EventArgs e)
    {
    string userName = txtUserName.Text.Trim().ToLower();
    string password = txtPassword.Text;
    bool isValid = false;
    try
    {
    isValid = Membership.ValidateUser(userName, password);
    }
    catch (Exception ex) { Response.Write(ex.Message); }
    if (isValid)
    {
    Authentication(txtUserName.Text, chkRemmeberMe.Checked);
    }
    else
    {
    litInvalidCredentialsMessage.Visible = true;
    }
    }


    private void Authentication(string userName, bool rememberMe)
    {
    // Query the user store to get this user's User Data
    string userDataString = String.Concat("Project.My", "|", userName);

    // Create the cookie that contains the forms authentication ticket
    HttpCookie authCookie = FormsAuthentication.GetAuthCookie(userName, rememberMe);

    // Get the FormsAuthenticationTicket out of the encrypted cookie
    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);


    // Create a new FormsAuthenticationTicket that includes our custom User Data
    FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
    version: ticket.Version,
    name: ticket.Name,
    issueDate: ticket.IssueDate,
    expiration: ticket.Expiration,
    isPersistent: ticket.IsPersistent,
    userData: userDataString
    );

    // Update the authCookie's Value to use the encrypted version of newTicket
    authCookie.Value = FormsAuthentication.Encrypt(newTicket);

    authCookie.HttpOnly = true;

    // Manually add the authCookie to the Cookies collection
    Response.Cookies.Add(authCookie);

    // Determine redirect URL and send user there
    string redirUrl = FormsAuthentication.GetRedirectUrl(userName, rememberMe);

    Response.Redirect(redirUrl);
    }

    این ها رو ببینید:(منابع مفید:)


    کسی می تونه درباره انواع authentication mode اطلاعاتی بده ؟
    با توضیح مثلا کی از windowsو کی از formsو....؟
    شما چهار تا راه داری:
    یا استفاده از User های خود Windows
    یا استفاده از Membership که در حالت Forms قرار داره.
    یا برای کاربر مورد نظرت یک Passport درست کنی.
    و یا اینکه Authentication رو بیخیال بشی و مقدار None رو در authentication mode انتخاب کنید.
    آخرین ویرایش به وسیله raziee : یک شنبه 18 دی 1390 در 00:27 صبح دلیل: ادغام دو پست
    نگو به سرنوشت میبازی - تو بخوای فردا رو میسازی

  9. #9
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

    نقل قول: آموزشی + ساخت لاگین

    خوب برای Login سایت



    کد login :
     if (Page.IsValid)
    {
    string HashPassword = FormsAuthentication.HashPasswordForStoringInConfig File(Password.Text, "MD5");

    //Check User name and Pass Word In Database
    //if Exist User

    FormsAuthentication.RedirectFromLoginPage(UserName .Text, RememberMe.Checked);
    //if doesn't have any ReturnUrl this method , returned user to Defualt Url in web.Config File "Default.aspx"

    }


    خوب حالا در هر صفحه ای از سایت که بخواهیم می توانیم نام کاربر را که اینجا داده ایم با این کد بدست بیاوریم .

    //Check User name 
    string Username = HttpContext.Current.User.Identity.Name;


    برای چک کردن اینکه آیا کاربری مثلا این صفحه را می بیند Login هست یا نه از کد زیر استفاده می کنیم.

     bool AuthenticatedUser = HttpContext.Current.User.Identity.IsAuthenticated;
    //true: User is Authenticated ,, false :User is Unauthenticated
    عکس های ضمیمه عکس های ضمیمه

  10. #10
    کاربر دائمی آواتار sam166
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    ???????
    پست
    508

    نقل قول: آموزشی + ساخت لاگین

    من از طریق کتاب و نمونه برنامه تونستم این کد رو برای ورود به سایت بنویسم
    البته یه ارور میده که در صدد حل کردنش هستم ولی گفتم بزارمش که شما تحلیلش کنید اگه به درد بخور هست روش کار کنم
    البته ارورشم این هست
    String was not recognized as a valid Boolean.


    اینم خود کد اصلی
       private string GetMemberRoleByID(string UID)
    {
    string connectionString1 = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Omid \Documents\Visual Studio 2010\WebSites\WebSite4\App_Data\omid.mdf;Integrate d Security=True;User Instance=True";
    SqlConnection conObj = new SqlConnection(connectionString1);
    string commandText = "select* from tbl_member(UID),values (@omid)";
    SqlCommand cmdObj = new SqlCommand(commandText, conObj);
    cmdObj.Parameters.AddWithValue("@omid",UID );
    conObj.Open();
    SqlDataReader dr = cmdObj.ExecuteReader();
    string RetVal = "NA";
    if (dr.Read())
    {
    RetVal = dr["Roles"].ToString();
    }
    conObj.Close();
    return RetVal;

    }
    private bool GetMemberAuthenticate(string UID, string PWD)
    {
    string connectionString1 = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Omid \Documents\Visual Studio 2010\WebSites\WebSite4\App_Data\omid.mdf;Integrate d Security=True;User Instance=True";
    SqlConnection conObj = new SqlConnection(connectionString1);
    string commandText = "select* from tbl_members ";
    SqlCommand cmdObj = new SqlCommand(commandText, conObj);
    bool RetVal = false;
    cmdObj.Parameters.AddWithValue("@aaa", UID);
    cmdObj.Parameters.AddWithValue("@aaa1", PWD);
    conObj.Open();
    RetVal = Convert.ToBoolean(cmdObj.ExecuteScalar());
    conObj.Close();
    return RetVal;

    }
    protected void btnok_Click(object sender, EventArgs e)
    {
    if (GetMemberAuthenticate(txtusername.Text,txtpass.Te xt))
    {
    string role = GetMemberRoleByID(txtusername.Text);
    FormsAuthenticationTicket AuthTicket = new FormsAuthenticationTicket(1, txtusername.Text, DateTime.Now, DateTime.Now.AddHours(1), false, role);
    string encryptedTicket = FormsAuthentication.Encrypt(AuthTicket);
    HttpCookie AuthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
    Response.Cookies.Add(AuthCookie);

    Response.Redirect(FormsAuthentication.GetRedirectU rl(txtusername.Text, chkRemmeberMe.Checked));
    }
    else
    {
    Label1.Visible = true;
    }

    }

  11. #11
    کاربر دائمی آواتار mahmood1000
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    فردیس
    پست
    331

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط raziee مشاهده تاپیک
    بهترین راه استفاده از Membership خود دات نت هست.
    البته نه دقیقا خود Membership دات نت ، بلکه در واقع بهترین راه توسعه ی Membership بر اساس نیاز/تجربه/دانش فردی و استفاده از اون.

    [/ltr]

    دوست عزیز ا اینکه خود Membership کامل هست و استفاده ا راهت شکی نیست، مشکلی که این وسط برای من با استفاده از Membership افتاده اینه که وقتی از طریق ASPConfigoration دیتا بیس ساخته میشه با نام ASPNETDB در فولدر ASD_DAT ذخیره میشه و خیلی خوب و راحت هم کار میکنه، حالا اگر ما بخوایم از این دیتا بیس تو هاست استفاده کنیم نمیشه ، لااقل برا من نشد، اگرتنظیماتی باید انجام بدم راهنمایی کنید.
    اگر راهی نداره از دوستان میخوام به کامل شدن این بحث کمک کنند چون مطمئنا خیلی از دوسان دیگه هم هستند که به این مطلب نیاز دارند.

    با تشکر از همه

  12. #12
    کاربر دائمی آواتار alonemm
    تاریخ عضویت
    آذر 1388
    محل زندگی
    تهرانپارس
    سن
    35
    پست
    1,846

    نقل قول: آموزشی + ساخت لاگین

    براي قسمت دسترسي كاربران Rol بايد يك جدول داشته باشيد كه دسترسي ها توش تعريف شده باشد.
    و هر كاربر يك دسترسي ميگيره. مثل مدير سيستم - كاربر - كاربردائمي ....
    حالا توي صفحات بر اساس اين دسترسي ميتونيد مشخص كنيد كه مثل نظرسنجي فقط براي كاربر دائمي كار كنه و يا ....

  13. #13
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط Mohandes2009 مشاهده تاپیک
    یه سوال از خانم z_bluestar داشتم:
    ببخشید من نفمیدم کی و کجا اطلاعات کاربر ذخیره شد در پایگاه میشه بگید؟
    و بعد از اینکه کاربر ثبت نام کرد چجوری میشه بهش یه میل زد و نام کاربری و رمز کاربری را براش فرستادمتشکرم
    من جای کد Insert به Database رو خالی گذاشتم چون هر کی با روش خودش Data در دیتابیس Insert می کند .


    //Hash Password
    string HashPassword = FormsAuthentication.HashPasswordForStoringInConfig File(Password.Text, "MD5");


    //1--Insert Data in Database
    //inja user be database ezafe mishe :)

    //2-Send Email



    اگه بخواین عضویت کاربران در سایت بوسیله ایمیل انجام شود می تونید بعد از وارد کردن اطلاعات کاربر در Database فیلد Isapproved را False قرار بدهید و یک ایمیل فعال سازی برای کاربر ارسال کنید و در صورت کلیک بر روی لینک موجود در ایمیل کاربر را در سایت فعال کنید .

    فقط فراموش نشود در صورت استفاده از این روش تا زمانی که فیلد Isapproved مساوی True نشده کاربر نتواند در سایت Login کند
    آخرین ویرایش به وسیله z_bluestar : چهارشنبه 24 آذر 1389 در 17:13 عصر

  14. #14

    نقل قول: آموزشی + ساخت لاگین

    کد ارسال ایمیل هست به زبان vb منبع کد:
    http://articles.sitepoint.com/articl...-email-asp-net


    [FONT=Courier New][SIZE=3][COLOR=#990000]<%@ Page Language="VB" EnableSessionState="False"
    EnableViewState="False" Trace="False" Debug="False"%>
    <%@ Import Namespace="System.Web.Mail" %>
    <script language="VB" runat=server>

    Sub Page_Load(Sender as Object, E as EventArgs)
    If Page.IsPostBack Then
    lblResponse.Text = "Your email has been sent."
    End If
    End Sub

    Sub btn_Click(sender as Object, e as System.EventArgs)
    If Request.Form("Email") <> "" Then
    Dim objMail As New MailMessage()
    objMail.From = "your_name@yourdomain.com"
    objMail.To = Request.Form("Email")
    objMail.Subject = Request.Form("Subject")
    objMail.Body = Request.Form("Message")
    objMail.BodyFormat = MailFormat.Text
    SmtpMail.SmtpServer = " smtp.your-server.com"
    SmtpMail.Send(objMail)
    Else
    lblResponse.Text = "Please enter an email address."
    End If
    End Sub

    </script>
    <html>
    <head>
    <style>
    .main {font-family:Verdana; font-size:12px;}
    .title {font-family:Verdana; font-size:18px; font-weight:bold;}
    </style>
    </head>
    <body>
    <span class="title" align="center">Send email from
    an ASP.NET page</span>

    <br><br><asp:Label class="main" id="lblResponse"
    runat="server"/>

    <form method="POST" name="MainForm" runat="server">
    <table>
    <tr>
    <td class="main" align="right">Email:</td>
    <td class="main"><input type="text"
    class="main" name="Email" value=""></td>
    </tr>
    <tr>
    <td class="main" align="right">
    Subject:</td>
    <td class="main"><input type="text"
    class="main" name="Subject" value=""></td>
    </tr>
    <tr>
    <td class="main" align="right"
    valign="top">Message:</td>
    <td class="main"><textarea name="Message"
    cols="50" rows="8"></textarea></td>
    </tr>


    <tr>
    <td class="main">&nbsp;</td>
    <td class="main"><input type="Submit"
    id="btnSubmit" OnServerClick="btn_Click" value="Send"
    runat="server" /></td>
    </tr>
    </table>
    </form>
    </body>
    </html>[/COLOR][/SIZE][/FONT]


    اما نفهمیدم چجوری لینک فعال سازی ارسال کنم براش و بعد چجوری بفهمم کلیک کرده روی اون لینک!!میشه توضیح بدیدی یا با کد بگید.

  15. #15
    کاربر دائمی آواتار mmnoody2006
    تاریخ عضویت
    آبان 1387
    محل زندگی
    مازندران
    پست
    547

    نقل قول: آموزشی + ساخت لاگین

    دوست عزیز لینک های فعال سازی کلا از یک روند استفاده می کنند
    شما برای هر کاربر یه فیلد به هر نامی از نوع boolean یا در sql server که همون bit می شه میزاری
    که مقدارش در حالت پیش فرض false می شه حالا از طریق لینک آدی کاربر رو هم می فرستی مثلا :
    www.sitename.com/useractive/activer.aspx?userid=124
    این مقدار 124 که آدی کاربر ماست رو به صفحه activer میفرسته در این صفحه روالی وجود داره که
    از طریق کوئری استرینگ مقدار آی دی کاربر رو می گیره و فیلد مربوط به کاربر رو به true آپدیت می کنه

    همین

  16. #16
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

    Cool

    دوستان در مورد ایمیل فعال سازی قبلا خیلی بحث شده
    چند تا لینک براتون گذاشتم:

    https://barnamenevis.org/showthread.php?t=227404
    https://barnamenevis.org/showthread.php?t=180928
    https://barnamenevis.org/showthread.php?t=170289
    https://barnamenevis.org/showthread.php?t=162936

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

    "دوستان لطفا اون پست هایی که احسای می کنید مطلب خاصی یا مفیدیدی رو در بر ندارند را حذف کنید تا برای دوستانی که می خوان بهدا این تاپیک رو بخونن
    پیگیری مطالب ساده تر بشه " با تشکر :)

    جلوگیری کردن از کاربران ناشناس(کسانی که Login نکرده اند ) از دیدن صفحاتی که نیاز به ورود به سایت دارن

    برای این کار دو روش وجود دارد :
    روش اول :

    در Page_Load صفحه مورد نظر کد زیر را بنویسید
    if (!HttpContext.Current.User.Identity.IsAuthenticate  d)
    FormsAuthentication.RedirectToLoginPage();


    کاربر در اینجا به صفحه ای redirect میشه که شما به عنوان Login Page در فایل web.config معرفی کردید.
    <authentication mode="Forms">
    <forms name=".Authentication" loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" slidingExpiration="true" timeout="43200">
    </forms>
    </authentication>


    روش دوم :

    شما می توانید تمام صفحاتی که نیاز به Login دارند را در یک Folder در پروژه قرار داده و یک فایل web.Config هم به آن پوشه اضافه کنید و کد زیر را در آن بنویسید.

    <configuration>
    <system.web>
    <authorization>
    <deny users="?"/>
    </authorization>
    </system.web>
    </configuration>


    با این روش شما به کاربرانی که ناشناخته می باشند (کسانی که Login نکرده اند ) اجازه دیدن صفحات داخل آن folder را نمی دهید .

    و اگر کاربری بدون Login بخواد صفحه ای را در داخل این Folder ببینه به صفحه Login
    Redirect میشه .
    آخرین ویرایش به وسیله raziee : یک شنبه 18 دی 1390 در 00:30 صبح دلیل: ادغام دو پست

  17. #17
    کاربر دائمی آواتار mahmood1000
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    فردیس
    پست
    331

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط mahmood1000 مشاهده تاپیک
    خانم z_bluestar

    امکانش هست که این دیتابیسی که آموزش دادید رو به همراه کداهاش تو اینجا اپلود کنید؟

    ممنون میشم اگر که این لطف رو کنید.

    با تشکر
    این کدشه ، البته از استور پروسیجر استفاده کردم


    using
    System;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;
    using System.Web.Configuration;
     
    namespace login_by_barnamenevis
    {
    publicpartialclassIndex : System.Web.UI.Page
    {
    protectedvoid Page_Load(object sender, EventArgs e)
    {
    }
    protectedvoid cmdCreateUser_Click(object sender, EventArgs e)
    {
    //Hash Password
    string HashPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Te xt, "MD5");
    //ساخت رشته اتصال و ارتباط با وب کانفیگ
    string connectionString = WebConfigurationManager.ConnectionStrings["ConnactionString"].ConnectionString;
    //برقراری ارتباط
    SqlConnection con = newSqlConnection(connectionString);
    SqlCommand cmd = newSqlCommand("InsertUser", con);
    //معرفی استور پروسیجر
    cmd.CommandType = CommandType.StoredProcedure;
    //معرفی اشیاء
    cmd.Parameters.AddWithValue("@UserName", txtUserName.Text);
    cmd.Parameters.AddWithValue(
    "@UserPass",HashPassword);
    cmd.Parameters.AddWithValue(
    "@UserEmail", txtEmail.Text);
    cmd.Parameters.AddWithValue(
    "@FName", txtFName.Text);
    cmd.Parameters.AddWithValue(
    "@LName", txtLName.Text);
    cmd.Parameters.AddWithValue(
    "@PasswordQuestion", txtQuestion.Text);
    cmd.Parameters.AddWithValue(
    "@PasswordAnsware", txtAnswer.Text);
    //درج مقادیر در تیبل
    int added = 0;
    try
    {
    con.Open();
    added = cmd.ExecuteNonQuery();
    Label1.Text = added.ToString() +
    " record inserted. ";
    }
    catch (Exception err)
    {
    Label1.Text =
    "Error :" + err.Message;
    }
    finally
    {
    con.Close();
    }

    }
    }
    }
    آخرین ویرایش به وسیله mahmood1000 : شنبه 15 آبان 1389 در 19:00 عصر

  18. #18
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359
    نقل قول نوشته شده توسط mahmood1000 مشاهده تاپیک
    امکانش هست این کد رو توضیح بدید؟
     
    FormsAuthentication.RedirectFromLoginPage(UserName .Text, RememberMe.Checked);
    این نام کاربری را در آن session یا cookie که در فایل Web.config معرفی کردید ذخیره می کند
    پارامتر اول نام کاربر و پارامتر دوم یک مقدار bool هست که آیا نام کاربر را به خاطر بسپارد یا نه ؟؟؟

    <authentication mode="Forms">
    <forms name=".Authentication"

    این یه نمونه کد ارسال ایمیل هست حالا یه روش دیگه هم هست که بعدا اون رو هم میگم :

     System.Net.Mail.MailMessage Mail = new System.Net.Mail.MailMessage("myemail@site.com", "tothisemail@yahoo.com");
    Mail.IsBodyHtml = true;
    Mail.Body = "This is a test mail ";
    Mail.Subject = "Activation mail alaki :D";

    Mail.ReplyTo = new System.Net.Mail.MailAddress("myemail@site.com");
    System.Net.Mail.SmtpClient newSmyp = new System.Net.Mail.SmtpClient("mail.site.com");
    newSmyp.Credentials = new System.Net.NetworkCredential("myemail@site.com", "myemailpassword");
    newSmyp.Send(Mail);


    دوستان این نکته رو هم به خاطر داشته باشید تو کامپیوتر خودتون نمی تونید ایمیل ارسال کنید چون باید تنظیمات mail Server رو داشته باشه .

    این کد رو می تونید روی هاست امتحان کنید
    آخرین ویرایش به وسیله raziee : یک شنبه 18 دی 1390 در 00:32 صبح دلیل: ادغام دو پست

  19. #19
    کاربر دائمی آواتار mahmood1000
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    فردیس
    پست
    331

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط z_bluestar مشاهده تاپیک
    این نام کاربری را در آن session یا cookie که در فایل Web.config معرفی کردید ذخیره می کند
    پارامتر اول نام کاربر و پارامتر دوم یک مقدار bool هست که آیا نام کاربر را به خاطر بسپارد یا نه ؟؟؟


    <authentication mode="Forms">


    <forms name=".Authentication"

    از اینکه تا الان انقدر خوب راهنمایی کردید خیلی خیلی سپاس گذارم.
    یه تقاضا داشتم.

    من خیلی تو بحث session & cooki مشکل دارم، امکانش هست این پروژ رو که تا اینجا جلو آمدم و درسایت آپلود کنید؟ با تمامی امکاناتی که صحبت شده؟

  20. #20
    کاربر دائمی آواتار baran_mehr
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    شهر آفتاب گرمسار
    پست
    1,129

    نقل قول: آموزشی + ساخت لاگین

    سلام به همه دوستان
    یکی از چیزایی که تو این روش خیلی کلافم میکنه اینه که مجبورم از دیتابیش خودش استفاده کنم با فیلدهای خودش، آیا روشی هست که بشه فیلد های مورد نظر خودمون رو به دیتابیس login اضافه کنیم!!

  21. #21
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط baran_mehr مشاهده تاپیک
    سلام به همه دوستان
    یکی از چیزایی که تو این روش خیلی کلافم میکنه اینه که مجبورم از دیتابیش خودش استفاده کنم با فیلدهای خودش، آیا روشی هست که بشه فیلد های مورد نظر خودمون رو به دیتابیس login اضافه کنیم!!
    منظورتون از فیلد های خودش یا Database خودش چیه ؟؟؟
    ما از Database که خودمون طراحی کردیم استفاده می کنیم

  22. #22

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط baran_mehr مشاهده تاپیک
    سلام به همه دوستان
    یکی از چیزایی که تو این روش خیلی کلافم میکنه اینه که مجبورم از دیتابیش خودش استفاده کنم با فیلدهای خودش، آیا روشی هست که بشه فیلد های مورد نظر خودمون رو به دیتابیس login اضافه کنیم!!
    دوتا دیتا بیس بیشتر نداریم می تونی در صفحات اولیه ببینی!

    یکی برای نقش ها یکی هم اطلاعات کاربران!

    خانم مهندس یه سوال چجوری میشه یکی از فیلد های جدول User را آپدیت کرد بنظرتون بهتر نیست یک جدول به اسم status داشته باشیم تا بتونیم کاربر را بهتر غیر فعالش کنیم تو سایت؟

  23. #23
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط Mohandes2009 مشاهده تاپیک
    دوتا دیتا بیس بیشتر نداریم می تونی در صفحات اولیه ببینی!

    یکی برای نقش ها یکی هم اطلاعات کاربران!

    خانم مهندس یه سوال چجوری میشه یکی از فیلد های جدول User را آپدیت کرد بنظرتون بهتر نیست یک جدول به اسم status داشته باشیم تا بتونیم کاربر را بهتر غیر فعالش کنیم تو سایت؟
    یه فیلد برای این کار داریم در جدول کاربران به پست 5 نگاه کنید
    status = فعال یا غیر فعال کردن کاربر

    هر کی بخواد میتونه Database رو متناسب با نیاز خودش طراحی کنه

  24. #24

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط z_bluestar مشاهده تاپیک
    یه فیلد برای این کار داریم در جدول کاربران به پست 5 نگاه کنید
    status = فعال یا غیر فعال کردن کاربر

    هر کی بخواد میتونه Database رو متناسب با نیاز خودش طراحی کنه
    بله دیدم این فیلدا موقع ثبت کاربر با مقدار true بر میگردونم بعدا اگه مدیر خواست اونا غیر فعال کنه! اما فک کردم جایی دیگه مشکل پیش بیاد و مثلا وقتی مدیر اگه false کرد دوباره بر گرده تو آپدیت ها و true بشه

  25. #25
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط Mohandes2009 مشاهده تاپیک
    بله دیدم این فیلدا موقع ثبت کاربر با مقدار true بر میگردونم بعدا اگه مدیر خواست اونا غیر فعال کنه! اما فک کردم جایی دیگه مشکل پیش بیاد و مثلا وقتی مدیر اگه false کرد دوباره بر گرده تو آپدیت ها و true بشه
    یعنی چی ؟؟؟
    خوب این فیلد فقط از پنل مدیریت Update می تواند شود .
    می تونی یک sp بنویسی که نام کاربر را بگیرد و یک مقدار bit که در جدول کاربر را با این نام اگه پیدا کرد مقدار Status رو برابر با اون مقدار Bit (true یا False(
    قرار دهد

  26. #26
    کاربر دائمی آواتار mahmood1000
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    فردیس
    پست
    331

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

    نقل قول نوشته شده توسط z_bluestar مشاهده تاپیک
    شما می توانید تمام صفحاتی که نیاز به Login دارند را در یک Folder در پروژه قرار داده و یک فایل web.Config هم به آن پوشه اضافه کنید و کد زیر را در آن بنویسید.

    <configuration>
    <system.web>
    <authorization>
    <deny users="?"/>
    </authorization>
    </system.web>
    </configuration>


    با این روش شما به کاربرانی که ناشناخته می باشند (کسانی که Login نکرده اند ) اجازه دیدن صفحات داخل آن folder را نمی دهید .

    و اگر کاربری بدون Login بخواد صفحه ای را در داخل این Folder ببینه به صفحه Login
    Redirect میشه .
    خانم z_bluestar
    بازم سپاس گذارم، یه سوال دیگه داشتم.
    من الان Login میکنم و هیچ مشکلی ندارم، حالا برای سطح دسترسی من یه تیبل به نام Role طبق روشی که گفتید ساختم،الان نمیدونم چطور میشه از طریق این تیبل سطح دسترسی رو معین کنم.

    اگر راهنمایی کنید ممنون میشم.

    با تشکر

  27. #27

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط z_bluestar مشاهده تاپیک
    یعنی چی ؟؟؟
    خوب این فیلد فقط از پنل مدیریت Update می تواند شود .
    می تونی یک sp بنویسی که نام کاربر را بگیرد و یک مقدار bit که در جدول کاربر را با این نام اگه پیدا کرد مقدار Status رو برابر با اون مقدار Bit (true یا False(
    قرار دهد
    یعنی زمانی که من دارم یه کاربر را اد میکنم به جدول این فیلد هم جزء اون جدول هست و باید مقدار دهی بشه!! چجوری مقدار دهی نکنم مدیر فقط مقدار دهی کنه ؟ مگه میشه همچین چیزی؟

  28. #28

    نقل قول: آموزشی + ساخت لاگین

    یعنی زمانی که من دارم یه کاربر را اد میکنم به جدول این فیلد هم جزء اون جدول هست و باید مقدار دهی بشه!! چجوری مقدار دهی نکنم مدیر فقط مقدار دهی کنه ؟ مگه میشه همچین چیزی؟
    یه کم بد متوجه شدی. ببین
    وقتی یه کاربری ثبت نام میکنه
    این فیلد به صورت پیش فرض برای اون کاربر true میشه. این true پیش فرض توی دستور اینزرت وجود داره. یعنی همین که اکانت کاربر ایجاد شد ، همون لحظه فعال هم مشه و کاربر میتونه ازش استفاده کنه (تو این حالت احتیاجی به ایمیل فعال سازی نداره). حالا فرض کن به هر علتی این یوزر بعد از یه مدت میخواد غیر فعال بشه (مثلا به دلیل رعایت نکرد قوانین سایت) خوب اون کسی که یوزر رو غیر فعال میکنه کیه؟ خوب معلومه دیگه. مدیر سایت از طریق پنل مدیریت خودش این فیلد رو false میکنه و اون اکانت غیر فعال میشه. خود کاربر بعد از فعال شدن اکانتش نقشی تو فعال یا غیر فعال کردن مجدد اکانت خودش نداره

    خانم z_bluestar
    بازم سپاس گذارم، یه سوال دیگه داشتم.
    من الان Login میکنم و هیچ مشکلی ندارم، حالا برای سطح دسترسی من یه تیبل به نام Role طبق روشی که گفتید ساختم،الان نمیدونم چطور میشه از طریق این تیبل سطح دسترسی رو معین کنم.
    اگر راهنمایی کنید ممنون میشم.
    با تشکر
    البته سوالتون از من نبود ولی با این حال... تو حالتی که از جداول ممبر شیپ توی دیتابیس خودتون استفاده میکنید اول یه همچین RoleManager ای رو به فایل web.config اضافه میکنید

    <roleManager defaultProvider="SqlProvider"
    enabled="true"
    cacheRolesInCookie="true"
    cookieName=".ASPROLES"
    cookieTimeout="30"
    cookiePath="/"
    cookieRequireSSL="false"
    cookieSlidingExpiration="true"
    cookieProtection="All" >
    <providers>
    <add
    name="SqlProvider"
    type="System.Web.Security.SqlRoleProvider"
    connectionStringName="SqlServices"
    applicationName="/" />
    </providers>
    </roleManager>

    اون
    SqlServices اسم کانکشن استرینگی هست که تو فایل web.config تعریف شده و نشون میده رول مورد نظر رو چه دیتابیسی اعمال میشه
    بعد موقع ایجاد یه یوزر Role مورد نظر رو برای اون یوزر تعیین میکنید. فرض کنید قراره یه کاربر نقش مدیریتی داشته یاشه. ستاره های پایین جهت یادآوریه تیکه کد زیر تو قسمتهای انتهای این پست هستش
    ***

    if (!Roles.RoleExists("Admin"))
    Roles.CreateRole("Admin");
    Roles.AddUserToRole(UsernameTextbox.Text, "Admin");

    ممبر شیپ از 2 تا جدول واسه نگهداری رولها و رولهایی که به کاربران داده شده استفاده میکنه
    اولی جدول aspnet_Roles هستش که اسکریپت سازندش اینه

    USE [MemberShip]
    GO

    /****** Object: Table [dbo].[aspnet_Roles] Script Date: 06/10/2010 15:03:58 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE TABLE [dbo].[aspnet_Roles](
    [ApplicationId] [uniqueidentifier] NOT NULL,
    [RoleId] [uniqueidentifier] NOT NULL,
    [RoleName] [nvarchar](256) NOT NULL,
    [LoweredRoleName] [nvarchar](256) NOT NULL,
    [Description] [nvarchar](256) NULL,
    PRIMARY KEY NONCLUSTERED
    (
    [RoleId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    ALTER TABLE [dbo].[aspnet_Roles] WITH CHECK ADD FOREIGN KEY([ApplicationId])
    REFERENCES [dbo].[aspnet_Applications] ([ApplicationId])
    GO

    ALTER TABLE [dbo].[aspnet_Roles] ADD DEFAULT (newid()) FOR [RoleId]
    GO


    و جدول aspnet_UsersInRoles که اسکریپت سازنده اون هم میشه این

    USE [MemberShip]
    GO

    /****** Object: Table [dbo].[aspnet_UsersInRoles] Script Date: 06/10/2010 15:06:14 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE TABLE [dbo].[aspnet_UsersInRoles](
    [UserId] [uniqueidentifier] NOT NULL,
    [RoleId] [uniqueidentifier] NOT NULL,
    PRIMARY KEY CLUSTERED
    (
    [UserId] ASC,
    [RoleId] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    ALTER TABLE [dbo].[aspnet_UsersInRoles] WITH CHECK ADD FOREIGN KEY([RoleId])
    REFERENCES [dbo].[aspnet_Roles] ([RoleId])
    GO

    ALTER TABLE [dbo].[aspnet_UsersInRoles] WITH CHECK ADD FOREIGN KEY([UserId])
    REFERENCES [dbo].[aspnet_Users] ([UserId])
    GO


    3 خط کدی رو که زیر ستاره ها نوشتم که یادتون هست. وقتی دو خط اول اجرا میشه در صورتی که رول مورد نظر تو جدول aspnet_Roles وجود نداشته باشه ، اون رول ایجاد میشه و با اجرای خط سوم یه سطر هم یه جدول aspnet_UsersInRoles اضافه میشه که اون رول رو به کاربر مورد نظر اختصاص میده
    بعد از این تو هر صفحه ای که خواستیم رول کاربری که لاگین کرده رو پیدا کنیم از این استفاده میکنیم
    مثلا تو لود صفحه

    if (User.IsInRole("MasterAdmin"))
    {

    }
    else if (User.IsInRole("Admin"))
    {

    }
    else
    {
    // Normal User
    }


    فعلا تا اینجاشو داشته باشید تا بعد


  29. #29
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

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

    نقل قول نوشته شده توسط mahmood1000 مشاهده تاپیک
    خانم z_bluestar
    بازم سپاس گذارم، یه سوال دیگه داشتم.
    من الان Login میکنم و هیچ مشکلی ندارم، حالا برای سطح دسترسی من یه تیبل به نام Role طبق روشی که گفتید ساختم،الان نمیدونم چطور میشه از طریق این تیبل سطح دسترسی رو معین کنم.

    اگر راهنمایی کنید ممنون میشم.

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

  30. #30

    نقل قول: آموزشی + ساخت لاگین

    اینم جهت سفارشی سازی RoleProvider
    کد HTML:
    using System.Web.Security;
    using System.Configuration.Provider;
    using System.Collections.Specialized;
    using System;
    using System.Data;
    using System.Data.Odbc;
    using System.Configuration;
    using System.Diagnostics;
    using System.Web;
    using System.Globalization;
    
    /*
    
    This provider works with the following schema for the tables of role data.
    
    CREATE TABLE Roles
    (
      Rolename Text (255) NOT NULL,
      ApplicationName Text (255) NOT NULL,
        CONSTRAINT PKRoles PRIMARY KEY (Rolename, ApplicationName)
    )
    
    CREATE TABLE UsersInRoles
    (
      Username Text (255) NOT NULL,
      Rolename Text (255) NOT NULL,
      ApplicationName Text (255) NOT NULL,
        CONSTRAINT PKUsersInRoles PRIMARY KEY (Username, Rolename, ApplicationName)
    )
    
    */
    
    
    namespace Samples.AspNet.Roles
    {
    
      public sealed class OdbcRoleProvider: RoleProvider
      {
    
        //
        // Global connection string, generic exception message, event log info.
        //
    
        private string eventSource = "OdbcRoleProvider";
        private string eventLog = "Application";
        private string exceptionMessage = "An exception occurred. Please check the Event Log.";
    
        private ConnectionStringSettings pConnectionStringSettings;
        private string connectionString;
    
    
        //
        // If false, exceptions are thrown to the caller. If true,
        // exceptions are written to the event log.
        //
    
        private bool pWriteExceptionsToEventLog = false;
    
        public bool WriteExceptionsToEventLog
        {
          get { return pWriteExceptionsToEventLog; }
          set { pWriteExceptionsToEventLog = value; }
        }
    
    
    
        //
        // System.Configuration.Provider.ProviderBase.Initialize Method
        //
    
        public override void Initialize(string name, NameValueCollection config)
        {
    
          //
          // Initialize values from web.config.
          //
    
          if (config == null)
            throw new ArgumentNullException("config");
    
          if (name == null || name.Length == 0)
            name = "OdbcRoleProvider";
    
          if (String.IsNullOrEmpty(config["description"]))
          {
            config.Remove("description");
            config.Add("description", "Sample ODBC Role provider");
          }
    
          // Initialize the abstract base class.
          base.Initialize(name, config);
    
    
          if (config["applicationName"] == null || config["applicationName"].Trim() == "")
          {
            pApplicationName = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath;
          }
          else
          {
            pApplicationName = config["applicationName"];
          }
    
    
          if (config["writeExceptionsToEventLog"] != null)
          {
            if (config["writeExceptionsToEventLog"].ToUpper() == "TRUE")
            {
              pWriteExceptionsToEventLog = true;
            }
          }
    
    
          //
          // Initialize OdbcConnection.
          //
    
          pConnectionStringSettings = ConfigurationManager.
            ConnectionStrings[config["connectionStringName"]];
    
          if (pConnectionStringSettings == null || pConnectionStringSettings.ConnectionString.Trim() == "")
          {
            throw new ProviderException("Connection string cannot be blank.");
          }
    
          connectionString = pConnectionStringSettings.ConnectionString;
        }
    
    
    
        //
        // System.Web.Security.RoleProvider properties.
        //
    
    
        private string pApplicationName;
    
    
        public override string ApplicationName
        {
          get { return pApplicationName; }
          set { pApplicationName = value; }
        } 
    
        //
        // System.Web.Security.RoleProvider methods.
        //
    
        //
        // RoleProvider.AddUsersToRoles
        //
    
        public override void AddUsersToRoles(string[]  usernames, string[] rolenames)
        {
          foreach (string rolename in rolenames)
          {
            if (!RoleExists(rolename))
            {
              throw new ProviderException("Role name not found.");
            }
          }
    
          foreach (string username in usernames)
          {
            if (username.Contains(","))
            {
              throw new ArgumentException("User names cannot contain commas.");
            }
    
            foreach (string rolename in rolenames)
            {
              if (IsUserInRole(username, rolename))
              {
                throw new ProviderException("User is already in role.");
              }
            }
          }
    
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("INSERT INTO UsersInRoles "  +
                  " (Username, Rolename, ApplicationName) " +
                  " Values(?, ?, ?)", conn);
    
          OdbcParameter userParm = cmd.Parameters.Add("@Username", OdbcType.VarChar, 255);
          OdbcParameter roleParm = cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255);
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          OdbcTransaction tran = null;
    
          try
          {
            conn.Open();
            tran = conn.BeginTransaction();
            cmd.Transaction = tran;
    
            foreach (string username in usernames)
            {
              foreach (string rolename in rolenames)
              {
                userParm.Value = username;
                roleParm.Value = rolename;
                cmd.ExecuteNonQuery();
              }
            }
    
            tran.Commit();
          }
          catch (OdbcException e)
          {
            try
            {
              tran.Rollback();
            }
            catch { }
    
    
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "AddUsersToRoles");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            conn.Close();      
          }
        }
    
    
        //
        // RoleProvider.CreateRole
        //
    
        public override void CreateRole(string rolename)
        { 
          if (rolename.Contains(","))
          {
            throw new ArgumentException("Role names cannot contain commas.");
          }
    
          if (RoleExists(rolename))
          {
            throw new ProviderException("Role name already exists.");
          }
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("INSERT INTO Roles "  +
                  " (Rolename, ApplicationName) " +
                  " Values(?, ?)", conn);
    
          cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255).Value = rolename;
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          try
          {
            conn.Open();
    
            cmd.ExecuteNonQuery();
          }
          catch (OdbcException e)
          {
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "CreateRole");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            conn.Close();      
          }
        }
    
    
        //
        // RoleProvider.DeleteRole
        //
    
        public override bool DeleteRole(string rolename, bool throwOnPopulatedRole)
        {
          if (!RoleExists(rolename))
          {
            throw new ProviderException("Role does not exist.");
          }
    
          if (throwOnPopulatedRole && GetUsersInRole(rolename).Length > 0)
          {
            throw new ProviderException("Cannot delete a populated role.");
          }
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("DELETE FROM Roles "  +
                  " WHERE Rolename = ? AND ApplicationName = ?", conn);
    
          cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255).Value = rolename;
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
    
          OdbcCommand cmd2 = new OdbcCommand("DELETE FROM UsersInRoles "  +
                  " WHERE Rolename = ? AND ApplicationName = ?", conn);
    
          cmd2.Parameters.Add("@Rolename", OdbcType.VarChar, 255).Value = rolename;
          cmd2.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          OdbcTransaction tran = null;
    
          try
          {
            conn.Open();
            tran = conn.BeginTransaction();
            cmd.Transaction = tran;
            cmd2.Transaction = tran;
    
            cmd2.ExecuteNonQuery();
            cmd.ExecuteNonQuery();
    
            tran.Commit();
          }
          catch (OdbcException e)
          {
            try
            {
              tran.Rollback();
            }
            catch { }
    
    
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "DeleteRole");
    
              return false;
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            conn.Close();      
          }
    
          return true;
        }
    
    
        //
        // RoleProvider.GetAllRoles
        //
    
        public override string[] GetAllRoles()
        {
          string tmpRoleNames = "";
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("SELECT Rolename FROM Roles "  +
                    " WHERE ApplicationName = ?", conn);
    
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          OdbcDataReader reader = null;
    
          try
          {
            conn.Open();
    
            reader = cmd.ExecuteReader();
    
            while (reader.Read())
            {
              tmpRoleNames += reader.GetString(0) + ",";
            }
          }
          catch (OdbcException e)
          {
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "GetAllRoles");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            if (reader != null) { reader.Close(); }
            conn.Close();      
          }
    
          if (tmpRoleNames.Length > 0)
          {
            // Remove trailing comma.
            tmpRoleNames = tmpRoleNames.Substring(0, tmpRoleNames.Length - 1);
            return tmpRoleNames.Split(',');
          }
    
          return new string[0];
        }
    
    
        //
        // RoleProvider.GetRolesForUser
        //
    
        public override string[] GetRolesForUser(string username)
        {
          string tmpRoleNames = "";
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("SELECT Rolename FROM UsersInRoles "  +
                  " WHERE Username = ? AND ApplicationName = ?", conn);
    
          cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          OdbcDataReader reader = null;
    
          try
          {
            conn.Open();
    
            reader = cmd.ExecuteReader();
    
            while (reader.Read())
            {
              tmpRoleNames += reader.GetString(0) + ",";
            }
          }
          catch (OdbcException e)
          {
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "GetRolesForUser");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            if (reader != null) { reader.Close(); }
            conn.Close();      
          }
    
          if (tmpRoleNames.Length > 0)
          {
            // Remove trailing comma.
            tmpRoleNames = tmpRoleNames.Substring(0, tmpRoleNames.Length - 1);
            return tmpRoleNames.Split(',');
          }
    
          return new string[0];
        }
    
    
        //
        // RoleProvider.GetUsersInRole
        //
    
        public override string[] GetUsersInRole(string rolename)
        {
          string tmpUserNames = "";
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("SELECT Username FROM UsersInRoles "  +
                    " WHERE Rolename = ? AND ApplicationName = ?", conn);
    
          cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255).Value = rolename;
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          OdbcDataReader reader = null;
    
          try
          {
            conn.Open();
    
            reader = cmd.ExecuteReader();
    
            while (reader.Read())
            {
              tmpUserNames += reader.GetString(0) + ",";
            }
          }
          catch (OdbcException e)
          {
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "GetUsersInRole");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            if (reader != null) { reader.Close(); }
            conn.Close();      
          }
    
          if (tmpUserNames.Length > 0)
          {
            // Remove trailing comma.
            tmpUserNames = tmpUserNames.Substring(0, tmpUserNames.Length - 1);
            return tmpUserNames.Split(',');
          }
    
          return new string[0];
        }
    
    
        //
        // RoleProvider.IsUserInRole
        //
    
        public override bool IsUserInRole(string username, string rolename)
        {
          bool userIsInRole = false;
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("SELECT COUNT(*) FROM UsersInRoles "  +
                  " WHERE Username = ? AND Rolename = ? AND ApplicationName = ?", conn);
    
          cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
          cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255).Value = rolename;
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          try
          {
            conn.Open();
    
            int numRecs = (int)cmd.ExecuteScalar();
    
            if (numRecs > 0)
            {
              userIsInRole = true;
            }
          }
          catch (OdbcException e)
          {
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "IsUserInRole");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            conn.Close();      
          }
    
          return userIsInRole;
        }
    
    
        //
        // RoleProvider.RemoveUsersFromRoles
        //
    
        public override void RemoveUsersFromRoles(string[] usernames, string[] rolenames)
        {
          foreach (string rolename in rolenames)
          {
            if (!RoleExists(rolename))
            {
              throw new ProviderException("Role name not found.");
            }
          }
    
          foreach (string username in usernames)
          {
            foreach (string rolename in rolenames)
            {
              if (!IsUserInRole(username, rolename))
              {
                throw new ProviderException("User is not in role.");
              }
            }
          }
    
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("DELETE FROM UsersInRoles "  +
                  " WHERE Username = ? AND Rolename = ? AND ApplicationName = ?", conn);
    
          OdbcParameter userParm = cmd.Parameters.Add("@Username", OdbcType.VarChar, 255);
          OdbcParameter roleParm = cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255);
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          OdbcTransaction tran = null;
    
          try
          {
            conn.Open();
            tran = conn.BeginTransaction();
            cmd.Transaction = tran;
    
            foreach (string username in usernames)
            {
              foreach (string rolename in rolenames)
              {
                userParm.Value = username;
                roleParm.Value = rolename;
                cmd.ExecuteNonQuery();
              }
            }
    
            tran.Commit();
          }
          catch (OdbcException e)
          {
            try
            {
              tran.Rollback();
            }
            catch { }
    
    
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "RemoveUsersFromRoles");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            conn.Close();      
          }
        }
    
    
        //
        // RoleProvider.RoleExists
        //
    
        public override bool RoleExists(string rolename)
        {
          bool exists = false;
    
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("SELECT COUNT(*) FROM Roles "  +
                    " WHERE Rolename = ? AND ApplicationName = ?", conn);
    
          cmd.Parameters.Add("@Rolename", OdbcType.VarChar, 255).Value = rolename;
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = ApplicationName;
    
          try
          {
            conn.Open();
    
            int numRecs = (int)cmd.ExecuteScalar();
    
            if (numRecs > 0)
            {
              exists = true;
            }
          }
          catch (OdbcException e)
          {
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "RoleExists");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            conn.Close();      
          }
    
          return exists;
        }
    
        //
        // RoleProvider.FindUsersInRole
        //
    
        public override string[] FindUsersInRole(string rolename, string usernameToMatch)
        {
          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("SELECT Username FROM UsersInRoles  " +
                    "WHERE Username LIKE ? AND RoleName = ? AND ApplicationName = ?", conn);
          cmd.Parameters.Add("@UsernameSearch", OdbcType.VarChar, 255).Value = usernameToMatch;
          cmd.Parameters.Add("@RoleName", OdbcType.VarChar, 255).Value = rolename;
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;
    
          string tmpUserNames = "";
          OdbcDataReader reader = null;
    
          try
          {
            conn.Open();
    
            reader = cmd.ExecuteReader();
    
            while (reader.Read())
            {
              tmpUserNames += reader.GetString(0) + ",";
            }
          }
          catch (OdbcException e)
          {
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "FindUsersInRole");
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            if (reader != null) { reader.Close(); }
    
            conn.Close();
          }
    
          if (tmpUserNames.Length > 0)
          {
            // Remove trailing comma.
            tmpUserNames = tmpUserNames.Substring(0, tmpUserNames.Length - 1);
            return tmpUserNames.Split(',');
          }
    
          return new string[0];
        }
    
        //
        // WriteToEventLog
        //   A helper function that writes exception detail to the event log. Exceptions
        // are written to the event log as a security measure to avoid private database
        // details from being returned to the browser. If a method does not return a status
        // or boolean indicating the action succeeded or failed, a generic exception is also 
        // thrown by the caller.
        //
    
        private void WriteToEventLog(OdbcException e, string action)
        {
          EventLog log = new EventLog();
          log.Source = eventSource;
          log.Log = eventLog;
    
          string message = exceptionMessage + "\n\n";
          message += "Action: " + action + "\n\n";
          message += "Exception: " + e.ToString();
    
          log.WriteEntry(message);
        }
    
      }
    }

  31. #31
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359
    یک کلاس در پروژه تون ایجاد کنید
    و اون رو Inherits کنید از کلاس RoleProvider
    public class MySiteRoleProvider: System.Web.Security.RoleProvider

    کلاس RoleProvider یک کلاس Abstract می باشد و شما باید یک سری از متدهاش رو پیاده سازی کنید برای این کار بر روی خط تیره زیر نام کلاس RoleProvider کلیک کرده و گزینه Implement abstract class System.Web.Security.RoleProvider
    را انتخاب نمایید .



    بعد از Implement کردن کلاس یک سری متد به آن اضافه می شه

    public class MySiteRoleProvider: System.Web.Security.RoleProvider
    {
    public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    {
    throw new NotImplementedException();
    }

    public override string ApplicationName
    {
    get
    {
    throw new NotImplementedException();
    }
    set
    {
    throw new NotImplementedException();
    }
    }

    public override void CreateRole(string roleName)
    {
    throw new NotImplementedException();
    }

    public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
    {
    throw new NotImplementedException();
    }

    public override string[] FindUsersInRole(string roleName, string usernameToMatch)
    {
    throw new NotImplementedException();
    }

    public override string[] GetAllRoles()
    {
    throw new NotImplementedException();
    }

    public override string[] GetRolesForUser(string username)
    {
    throw new NotImplementedException();
    }

    public override string[] GetUsersInRole(string roleName)
    {
    throw new NotImplementedException();
    }

    public override bool IsUserInRole(string username, string roleName)
    {
    throw new NotImplementedException();
    }

    public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
    {
    throw new NotImplementedException();
    }

    public override bool RoleExists(string roleName)
    {
    throw new NotImplementedException();
    }
    }


    حالا ما می تونیم هر کدام از این متدها رو بر حسب نیازمون تغییر بدیم مثلا برای متد GetRolesForUser

    public override string[] GetRolesForUser(string username)
    {
    string[] UserRolename=new string[1];
    UserRolename[0] = DataLayer.Users.RoleName(username); // خوندن نام نقش کاربر از دیتابیس
    return UserRolename;
    }


    برای این کار یه تغییر هم باید در web.config بدهید
    <system.web>
    <roleManager defaultProvider="SiteRoleProvider" enabled="true">
    <providers>
    <clear/>
    <add name="SiteRoleProvider" type="abcconstruct.Classes.MySiteRoleProvider"/>
    </providers>
    </roleManager>


    abcconstruct.Classes نام name space کلاسم هست

    حالا برای استفاده کردن از این می تونیم دو روش استفاده کنیم :
    1- در web.config فولدری که می خواهین مثلا فقط برای کاربران admin قابل مشاهده باشد این را بنویسید :

    <system.web>
    <authorization>
    <allow roles="Administrator"/>
    <deny users="*"/>
    </authorization>
    </system.web>
    </configuration>


    یا در صفحه ای که می خواهید Role کاربر را چک کنید این کد را بویسید .
    String[] Role = RoleProvider.GetRolesForUser(txtLUsername.Text);
    if (Role[0] == "Company")
    Response.Redirect("~/Customer/");
    else
    Response.Redirect("~/User/");


    یا برای چک کردن این که آیا این کاربر دارای نقش مورد نظر هست یا نه ؟؟

     bool IsinRole = HttpContext.Current.User.IsInRole("Administrator")  ;


    ارسال ایمیل :

    using System;
    using System.Web.Mail;
    namespace SMTPAuthentication
    {
    public class SMTPAuthenticationExample
    {
    public static void SendMail()
    {
    string smtpServer = "mail.yourdomain.com";
    string userName = "you@yourdomain.com";
    string password = "YourMailboxPassword";
    int cdoBasic = 1;
    int cdoSendUsingPort = 2;
    MailMessage msg = new MailMessage();
    if (userName.Length > 0)
    {
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", smtpServer);
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25) ;
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", cdoSendUsingPort) ;
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoBasic);
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", userName);
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password);
    }
    msg.To = "someone@domain.com";
    msg.From = "you@yourdomain.com";
    msg.Subject = "Subject";
    msg.Body = "Message";
    SmtpMail.SmtpServer = smtpServer;
    SmtpMail.Send(msg);
    }
    }
    }
    آخرین ویرایش به وسیله raziee : یک شنبه 18 دی 1390 در 00:52 صبح دلیل: ادغام کردن پست ها

  32. #32
    کلاس RoleProvider یک کلاس Abstract می باشد و شما باید یک سری از متدهاش رو پیاده سازی کنید برای این کار بر روی خط تیره زیر نام کلاس RoleProvider کلیک کرده و گزینه Implement abstract class System.Web.Security.RoleProvider
    را انتخاب نمایید .
    خط تیره کجاست؟ من نمی بینم!!

    برای این کار یه تغییر هم باید در web.config بدهید
    <system.web>
    <roleManager defaultProvider="SiteRoleProvider" enabled="true">
    <providers>
    <clear/>
    <add name="SiteRoleProvider" type="abcconstruct.Classes.MySiteRoleProvider"/>
    </providers>
    </roleManager>


    abcconstruct.Classes نام name space کلاسم هست
    این کدای وب کانفیکا توضیح بدین!
    abcconstruct.Classes منظورتون کدوم کلاسه؟

    من یه کلاس ایجاد کردم بنام Class2 و کدای شما را توش کپی کردم و بعد تو فایل وب کانفیک اونجایی که گفتید این کدایی که نوشتید را نوشتم!!

    نقل قول نوشته شده توسط z_bluestar مشاهده تاپیک
    حالا برای استفاده کردن از این می تونیم دو روش استفاده کنیم :
    1- در web.config فولدری که می خواهین مثلا فقط برای کاربران admin قابل مشاهده باشد این را بنویسید :

    <system.web>
    <authorization>
    <allow roles="Administrator"/>
    <deny users="*"/>
    </authorization>
    </system.web>
    </configuration>

    نام فلدری که می خوایم فقط برای کاربران admin نمایش داده بشه Administrator است؟

    یعنی نام فلدرمون را به جای Administrator بنویسیم؟
    نگرفتم حرفتونا ببخشید این همه سوال میکنم

    نقل قول نوشته شده توسط z_bluestar مشاهده تاپیک
    ارسال ایمیل :

    using System;
    using System.Web.Mail;
    namespace SMTPAuthentication
    {
    public class SMTPAuthenticationExample
    {
    public static void SendMail()
    {
    string smtpServer = "mail.yourdomain.com";
    string userName = "you@yourdomain.com";
    string password = "YourMailboxPassword";
    int cdoBasic = 1;
    int cdoSendUsingPort = 2;
    MailMessage msg = new MailMessage();
    if (userName.Length > 0)
    {
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", smtpServer);
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25) ;
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", cdoSendUsingPort) ;
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoBasic);
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", userName);
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password);
    }
    msg.To = "someone@domain.com";
    msg.From = "you@yourdomain.com";
    msg.Subject = "Subject";
    msg.Body = "Message";
    SmtpMail.SmtpServer = smtpServer;
    SmtpMail.Send(msg);
    }
    }
    }
    ببخشید باز سوال پیش اومد :
    این خط کد ها یعنی چی؟
    msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", smtpServer);
    در ضمن حتما باید ایمیل روی دامین داشته باشیم؟ یعنی من جیمیل دارم نمی تونم استفاده کنم؟

    اگه میشه طریقه استفاده اش چجوریه؟
    آخرین ویرایش به وسیله raziee : یک شنبه 18 دی 1390 در 00:53 صبح دلیل: ادغام دو پست

  33. #33

    نقل قول: آموزشی + ساخت لاگین

    سلام.
    یعنی نام فلدرمون را به جای Administrator بنویسیم؟
    نه اسم فولدر نیست. اسم یکی از رولهای تعریف شده هستش. یعنی کاربرایی که تو نقش مدیریتی هستن اجازه دارن

    خط تیره کجاست؟ من نمی بینم!!
    موس رو ببر رو کلمه قرمز رنگ یه خط زیر اون کلمه ظاهر میشه. اینجا نگفتم، منظورم تو ویژوال استودیو بود
    شوخی کردم

    public class MySiteRoleProvider: RoleProvider
    تو پست 63 این کلاس رو به صورت کامل قرار دادم

    abcconstruct.Classes منظورتون کدوم کلاسه؟
    اون بنده خدا که گفته این namespace مربوط به کلاسشه
    abcconstruct.Classes نام name space کلاسم هست
    راستی خانوم z_bluestar چرا اینجا گفتید

    public override string[] GetRolesForUser(string username)
    {
    string[] UserRolename=new string[1];
    UserRolename[0] = DataLayer.Users.RoleName(username); // خوندن نام نقش کاربر از دیتابیس
    return UserRolename;
    }
    اول یه آرایه از نوع استرینگ که فقط یه عضو داره و مقداری رو که از دیتابیس گرفتید ریختید تو UserRolename[0] .. اگه قراره که فقط یه رول برگردونه که خوب اولا احتیاجی به آرایه نیست و با یه متغیر string کار راه میافته
    و دوم اینکه لازمش اینه که هر کاربر فقط یه نقش داشته باشه . ولی ممکنه یه کاربر چند تا نقش هم داشته باشه (نه صرفا یه نقش) ضمن اینکه از اسم این تابع معلومه که ممکنه نقش این کاربر بیش از یکی باشه.
    همه نقشهای این کاربر توسط ریدر از بانک خونده میشن و با کاما از هم جدا میشن و وقتی از ریدر اومدیم بیرون توسط تابع split نقشها رو تو قالب یه آرایه برمیگردونیم

  34. #34
    کاربر دائمی آواتار mahmood1000
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    فردیس
    پست
    331

    نقل قول: Role Provider

    نقل قول نوشته شده توسط z_bluestar مشاهده تاپیک
    یک کلاس در پروژه تون ایجاد کنید
    و اون رو Inherits کنید از کلاس RoleProvider
    public class MySiteRoleProvider: System.Web.Security.RoleProvider

    کلاس RoleProvider یک کلاس Abstract می باشد و شما باید یک سری از متدهاش رو پیاده سازی کنید برای این کار بر روی خط تیره زیر نام کلاس RoleProvider کلیک کرده و گزینه Implement abstract class System.Web.Security.RoleProvider
    را انتخاب نمایید .
    دوست عزیز میشه د رابطه با این کد توضیح بدید؟ چطور باید از db نقش کاربر رو بخونم؟
    UserRolename[0] = DataLayer.Users.RoleName(username); // خوندن نام نقش کاربر از دیتابیس

    دوستان اگر کس دیگه هم میدونه لطفا کمک کنه


    با تشکر

  35. #35

    نقل قول: آموزشی + ساخت لاگین

    نقل قول نوشته شده توسط karaji333 مشاهده تاپیک
    سلام.
    نه اسم فولدر نیست. اسم یکی از رولهای تعریف شده هستش. یعنی کاربرایی که تو نقش مدیریتی هستن اجازه دارن


    اون بنده خدا که گفته این namespace مربوط به کلاسشه
    خب پس از کجا بفهمه کدوم فلدری که ما ایجاد کردیم واسه admine کدوم usere ؟ اسم فلدرا کجا باید بنویسیم؟ شاید چندتا فلدر داشتیم!!

    بعد اینکه namespase نداره که کل کلاسی که گفتند ایجاد کنیم اینه تو پروژه من :


    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    ///<summary>
    ///
    Summary description for Class2
    ///</summary>
    ///

    publicclassMySiteRoleProvider : System.Web.Security.RoleProvider
    {
    publicoverridevoid AddUsersToRoles(string[] usernames, string[] roleNames)
    {
    thrownewNotImplementedException();
    }
    publicoverridestring ApplicationName
    {
    get
    {
    thrownewNotImplementedException();
    }
    set
    {
    thrownewNotImplementedException();
    }
    }
    publicoverridevoid CreateRole(string roleName)
    {
    thrownewNotImplementedException();
    }
    publicoverridebool DeleteRole(string roleName, bool throwOnPopulatedRole)
    {
    thrownewNotImplementedException();
    }
    publicoverridestring[] FindUsersInRole(string roleName, string usernameToMatch)
    {
    thrownewNotImplementedException();
    }
    publicoverridestring[] GetAllRoles()
    {
    thrownewNotImplementedException();
    }
    publicoverridestring[] GetRolesForUser(string username)
    {
    string[] UserRolename = newstring[1];
    UserRolename[0] = DataLayer.Users.RoleName(username);
    // ¦يë§ë ëںê ëç¬ کں© © ںھ §ی¢ں ی«
    return UserRolename;
    }
    publicoverridestring[] GetUsersInRole(string roleName)
    {
    thrownewNotImplementedException();
    }
    publicoverridebool IsUserInRole(string username, string roleName)
    {
    thrownewNotImplementedException();
    }
    publicoverridevoid RemoveUsersFromRoles(string[] usernames, string[] roleNames)
    {
    thrownewNotImplementedException();
    }
    publicoverridebool RoleExists(string roleName)
    {
    thrownewNotImplementedException();
    }
    }




    آخرین ویرایش به وسیله Mohandes2009 : چهارشنبه 19 آبان 1389 در 08:15 صبح

  36. #36
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359
    نقل قول نوشته شده توسط karaji333 مشاهده تاپیک
    راستی خانوم z_bluestar چرا اینجا گفتید

    public override string[] GetRolesForUser(string username)
    {
    string[] UserRolename=new string[1];
    UserRolename[0] = DataLayer.Users.RoleName(username); // خوندن نام نقش کاربر از دیتابیس
    return UserRolename;
    }
    اول یه آرایه از نوع استرینگ که فقط یه عضو داره و مقداری رو که از دیتابیس گرفتید ریختید تو UserRolename[0] .. اگه قراره که فقط یه رول برگردونه که خوب اولا احتیاجی به آرایه نیست و با یه متغیر string کار راه میافته
    و دوم اینکه لازمش اینه که هر کاربر فقط یه نقش داشته باشه . ولی ممکنه یه کاربر چند تا نقش هم داشته باشه (نه صرفا یه نقش) ضمن اینکه از اسم این تابع معلومه که ممکنه نقش این کاربر بیش از یکی باشه.
    همه نقشهای این کاربر توسط ریدر از بانک خونده میشن و با کاما از هم جدا میشن و وقتی از ریدر اومدیم بیرون توسط تابع split نقشها رو تو قالب یه آرایه برمیگردونیم
    دوست عزیز خروجی متد از نوع string[] است چون به قول خودتون یک کاربر می تونه چند تا Role داشته باشه ولی ما اینجا فقط یک Role داریم .

    البته این کد رو میشه بهینه تر هم نوشت .

    نقل قول نوشته شده توسط Mohandes2009 مشاهده تاپیک
    خب پس از کجا بفهمه کدوم فلدری که ما ایجاد کردیم واسه admine کدوم usere ؟ اسم فلدرا کجا باید بنویسیم؟ شاید چندتا فلدر داشتیم!!

    بعد اینکه namespase نداره که کل کلاسی که گفتند ایجاد کنیم اینه تو پروژه من :
    مهندس خوب دقت نمی کنیا اولا من گفتم تو همون فولدری که می خوای مثلا فولدر Administrator یک فایل web.config ایجاد کن بعد اینا رو توش بنویس .

    خوب این طوری درستش کن

    namespace abcconstruct.Classes
    {
    public class MySiteRoleProvider : RoleProvider
    {


    نقل قول نوشته شده توسط mahmood1000 مشاهده تاپیک
    دوست عزیز میشه د رابطه با این کد توضیح بدید؟ چطور باید از db نقش کاربر رو بخونم؟
    UserRolename[0] = DataLayer.Users.RoleName(username); // خوندن نام نقش کاربر از دیتابیس
    دوستان اگر کس دیگه هم میدونه لطفا کمک کنه با تشکر
    خوب دوست عزیز من از n-tir استفاده میکنم شما با هر چی که دلت می خواد میتونی بخونی
    با Query ، StoreProcedure ,... کاری نداره یه select از database

    select Rolename
    From Users inner join Roles on Users.RoleID =Roles.RoleID
    where username =@Username
    آخرین ویرایش به وسیله raziee : یک شنبه 18 دی 1390 در 00:21 صبح دلیل: ادغام کردن پست ها

  37. #37

    نقل قول: آموزشی + ساخت لاگین

    دوست عزیز خروجی متد از نوع string[] است چون به قول خودتون یک کاربر می تونه چند تا Role داشته باشه ولی ما اینجا فقط یک Role داریم .
    سلام. میدونم خروجی از نوع آرایه ای از استرینگ هستش. منظورم این بود که اگه قرار بود یه رول باشه خودشون اون خروجی رو از نوع استرینگ میگرفتن نه یه آرایه از نوع استرینگ (ماکروسافتی ها رو میگم )
    ممنون

  38. #38
    دوستان سلام
    خیلی بحثه فوق العاده ایه
    لطفا ادامش بدین و به یک نتیجه گیریه دست جمعی برسین که بلاخره بهترین و کامل ترین و امن ترین راه کدومه تا به صورت یک پی دی اف در بیاریم و بزاریم واسه بقیه
    من 3 صفحه رو خوندم
    فی ما بین صفحات از ایمیل هم گاهی پست زدین
    لطفا یکی از دوستان یک ایمیل بسازه
    و یک پروژه کامل ارسال ایمیل بنویسه
    در صورتی که ایمیل ها به spam ها منتقل نشه(چون من هنوز نتونستم یک ایمیله بدون نقص رو بفرستم)
    فکر کنم مشکله خیلی از بچه هاست
    یا حدا اقل کامل کدها رو توضیح بدین و بخصوص سروری که باید ست بشه مثلا یاهوه چی باید بنویسیم و....

    باتشکر



    ----------------------------------------------
    کتاب های فارسی ASP.Net

    سلام
    من این فیلم آموزشی مایکروسافت رو پیدا کردم

    لینک دانلود


    این سورسه خوده مایکروسافته
    کسی می تونه ارورشو بگیره؟






    ----------------------------------------------
    کتاب های فارسی ASP.NET
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله raziee : یک شنبه 18 دی 1390 در 00:20 صبح دلیل: ادغام دو پست

  39. #39
    کاربر دائمی آواتار mmnoody2006
    تاریخ عضویت
    آبان 1387
    محل زندگی
    مازندران
    پست
    547

    نقل قول: آموزشی + ساخت لاگین

    سلام به خدا حیف نیست بحث به این شیرینی اینجا تموم بشه .
    البته من خودم مشکلی ندارم ولی مبتدی جماعت بالاخره باید یه منبع فارسی داشته
    باشن تا شروع کنن یا نه .

    به هر حال من یه مقاله خیلی مفید در ضمینه امنیت Authentication دارم می زارم استفاده کنی
    از سایت خود مایکروسافته
    فایل های ضمیمه فایل های ضمیمه

  40. #40
    کاربر دائمی آواتار z_bluestar
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    سن
    37
    پست
    359

    نقل قول: آموزشی + ساخت لاگین

    شما کاربرانتون رو توسط خود asp.net دارید مدیریت می کنید و روش امنی هست .
    من تا حالا مشکلی تو این روش ندیدم یا بهتر بگم روش امن تری ندیدم .

صفحه 1 از 2 12 آخرآخر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •