PDA

View Full Version : سوال: سطح دسترسی در authentication



karim orooji
پنج شنبه 29 مهر 1389, 15:31 عصر
با سلام به دوستان
من دربرنامه برای ورود کاربران از authentication استفاده میکنم
حالا میخوام در برنامه سطح دسترسی ایجاد کنم باید چه کنم
زمانی که مدیر میخواد وارد سایت بشه چیکار کنم
کد authentication در کانفیگ




<authentication mode="Forms">
<forms name="logincookie" loginUrl="Default.aspx" timeout="20" defaultUrl="home_page.aspx"></forms>
</authentication>
<authorization>



این کد هم برای تشخیص هویت



Private Function IsUser() As Boolean
Try
Dim com As New SqlCommand
com.Connection = con
com.CommandText = "Select Count(*) From register Where user_name=@user_name And pass=@pass"
com.Parameters.AddWithValue("@user_name", txt_user.Text)
com.Parameters.AddWithValue("@pass", txt_pass.Text)
con.Open()
If com.ExecuteScalar = 1 Then
Return True
End If
con.Close()
Catch ex As Exception
End Try
End Function
Protected Sub btnLogin_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLogin.Click
If IsUser() Then
FormsAuthentication.SetAuthCookie(txt_user.Text, True)
FormsAuthentication.RedirectFromLoginPage(txt_pass .Text, True)
Session("user") = Trim(txt_user.Text)
Session("pass") = Trim(txt_pass.Text)
Label4.Visible = False
Else
txt_user.Text = ""
txt_pass.Text = ""
lbl.Visible = True
txt_user.Focus()
End If
End Sub



برای ورود به پنل کاربری مدیر باید چیکار کرد

farhadt
پنج شنبه 29 مهر 1389, 17:01 عصر
موضوع مورد نیاز منم هست. اساتید راهنمایی کنن.

pikoolas
پنج شنبه 29 مهر 1389, 17:41 عصر
شما یک کلاس جدید درست کنید که از کلاس roleprovider ارث ببره. حالا در متد getrolesForUsers مقدار role ای که خودتون ساخته اید return کنید.
در web.config سایتتونم باید این کلاس رو معرفی کنید

<roleManager enabled="true" defaultProvider="MyRoleProvider">
<providers>
<clear />
<add name="MyRoleProvider" type="YourClassUrl"/>
</providers>

</roleManager>
خوب دیگه حالا .net می تونه role های ایجاد شده توسط شما رو بشناسه و در هر فولدری می تونید web.config بزارید و مجوز دسترسی به رولهاتون رو بدید.

karim orooji
پنج شنبه 29 مهر 1389, 17:57 عصر
سلام بیسار ممنون زحمت کشید جواب دادید
ببخشید این سوال مبتدی رو میکنم
roleprovider و roleManager جی هستند میشه توضیح بدید

pikoolas
پنج شنبه 29 مهر 1389, 18:29 عصر
RoleProvider که از کلاسهای خود دات نت هست و در namespace -> System.Web.Security; قرار دارد. کار این کلاس کارهایی مانند ساخت و حذف رول و دادن نقش به کاربر و از اینجور کارها است. بعد از اینکه کلاستون را ساختید
public class YourClass:RoleProvider
خودش متد ها را براتون میاره . از اسم متد هاش میشه بقیه وظایفش رو فهمید.
در rolemanager که باید در system.web قرارش بدید شما این امکان را ایجاد می کنید که .net از provider شما استفاده کند
<roleManager enabled="true" . شما یک provider خودتون به rolemanager معرفی می کنید.
defaultProvider="MyRoleProvider"
و بعد اون رو ایجاد و و در type هم مسیری که کلاس شما در آن وجود دارد را می نویسید
<providers>
<clear />
<add name="MyRoleProvider" type="YourClassUrl"/>
</providers>

karim orooji
پنج شنبه 29 مهر 1389, 18:59 عصر
سلام
خوب من کد لاگین کاربر رو به صورت دستی انجام دادم
اونوقت میشه من RoleProvider میشه در برنامه استفاده کرده

pikoolas
پنج شنبه 29 مهر 1389, 20:19 عصر
بله . فقط کافی است رول کاربری که لاگین کرده است را در متد getrolesForUsers در کلاس که ایجاد کرده اید return کنید + در web.config که در فولدر مدریت دارید به آن رول مجوز ورود داده باشید.

karim orooji
پنج شنبه 29 مهر 1389, 22:34 عصر
سلام ممنون
حالا این کلاسی که میگید توش باید چی نوشت
تا حالا این کار نکردم بلد نیستم

pikoolas
جمعه 30 مهر 1389, 02:02 صبح
سلام.
اول شما این namesapace رو به کلاستون اضافه می کنید.

using System.Web.Security;
بعد طبق کد زیر کلاستون از کلاس RoleProvider ارث می بره

public class Class1:RoleProvider
چون کلاس RoleProvider به صورت abstract می باشد ماوس را روی RoleProvider بزارید تا گزینه
implement abstract class roleProvder نمایان شود و سپس با روی آن گزینه کلیک می کنید.
حالا تو متد GetRolesForUser

public override string[] GetRolesForUser(string username)
مقدار role کاربرتون رو باید return کنید. قبلش کدهای داخل متد رو پاک کنید . و توجه داشته باشید که مقدار ارسالی از نوع string[] است. پس شما ارایه ای از نوع استرینگ با یک خانه ایجاد کنید.

string[] Role = new string[1];
و مقدار رولی که از دیتابیس میخونی رو داخل Role[0[ میریزی و در نهایت return Role میکنی.