PDA

View Full Version : ابهام در تنظیمات دسترسی های login



komeil64
سه شنبه 21 اردیبهشت 1389, 17:46 عصر
با سلام
من یک تیبل دارم که به غیر از فیلد هایی مثل یوزر و رمز و ایمیل و ... یک فیلد بنام role داره که اگر صفر باشه از دید برنامه من یوزر معمولیه و اگر 1 باشه ادمین
دو تا فولدر دارم فولدر users و فولدر admin
من وب کانفیگ فولدر یوزر رو به این صورت نوشتم


<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
</configuration>

و توی کانفیگ اصلی برنامه خط زیر رو اضافه کردم


<authentication mode="Forms">
<forms defaultUrl="./" loginUrl="~/login.aspx" timeout="3000" name="abcd" />
</authentication>

اما مشکل من با فولدر ادمینه که چطور از روش بالا استفاده کنم اما با این تفاوت که اگر فیلد role 0 بود بره فولدر یوزر و اگر 1 بود بره فولدر ادمین
اگر همون کد کانفیگ فولدر یوزر رو داخل فولدر ادمین هم بزارم قائدتا هر یوزری درست لاگین بکنه به فولدر ادمینم هم دسترسی داره
یه مقدار مبهمه که چطور مشکل رو رفع کنم
ممنون میشم راهنمایی کنید

mmnoody2006
سه شنبه 21 اردیبهشت 1389, 22:59 عصر
Private Sub AutoRedirect(ByVal username As String)
If Roles.IsUserInRole(username, "Administrators") Then
Response.Redirect("../useradmin/")
ElseIf Roles.IsUserInRole(username, "User") Then
Response.Redirect("../User/")
ElseIf Roles.IsUserInRole(username, "Manager") Then
Response.Redirect("../UserManager/")
End If
End Sub

komeil64
چهارشنبه 22 اردیبهشت 1389, 10:48 صبح
ممنون از راهنماییتون
شما بعد از username ، رل یوزر رو نوشتید
این رل یوزر همونی که من از دیتا بیس چک کردم؟ یا باید جایی تنظیم کنم؟
رل های یوزر ها در دیتا بیس من بصورت یک رکورد داخل همون تیبل یوزراست!

komeil64
چهارشنبه 22 اردیبهشت 1389, 15:16 عصر
سلام
از راهنمایی همه دوستان ممنون!!!
من خیلی از مطالب سایت رو دیدم اما متوجه توضیحات نشدم به عنوان نمونه کلاس roleprovider
برنامه من الان به این صورته
این کد کانفیگ برای لاگین:(وب کانفیگ اصلی سایت)


<authentication mode="Forms">
<forms defaultUrl="./" loginUrl="~/login.aspx" timeout="3000" name="abcd" />
</authentication>

دو تا فولدر دارم :admin و users که توی هر کدوم یه وب کانفیگ گذاشتم با تنظیمات زیر(نظر به اینکه نمی دونم چطور دسترسی فولدر ادمین رو مشخص کنم برای رل ادمین همون تنظیم یوزرز رو گذاشتم):


<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
</configuration>

خب یه تیبل داریم یه اسم tblusers که یه فیلدش به نام role اگر 1 باشه یعنی مدیر اگر 0 باشه یعنی یوزر
کد زیر کد دکمه لاگین منه :



try
{
//چک می شود یوزر موجود است یا خیر
SqlConnection sconnlogin = new SqlConnection(ConfigurationManager.ConnectionStrin gs["ConnectionString2"].ToString());
string uname = txt_userlogin.Text;
string hashpass = FormsAuthentication.HashPasswordForStoringInConfig File(txt_passlogin.Text, "MD5");
SqlCommand scommlogin = new SqlCommand("select pass from tblusers where user_name='" + txt_userlogin.Text + "' and approve='true'", sconnlogin);
if (sconnlogin.State != ConnectionState.Open) sconnlogin.Open();
SqlDataReader sdrlogin = scommlogin.ExecuteReader();
while (sdrlogin.Read())
{

//اگر موجود بود و رمز تطابق داشت
if (hashpass.ToString().ToLower() == sdrlogin[0].ToString().ToLower())
{


FormsAuthentication.RedirectFromLoginPage(txt_user login.Text, false);
Response.Redirect("~/users/Default.aspx");


}
else
{
lbl_login.Text = "اطلاعات ورود صحیح نمی باشد";
}

}
sconnlogin.Close();

}
catch
{
//دیتا یسش مشکل دارد
lbl_login.Text = "مشکل در برقراری ارتباط با دیتا بیس ، لطفا با برنامه نویس تماس بگیرید";
}

خب اگر دقت کنید در صورت لاگین صحیح کار بر به فولدر یوزرز هدایت میشه اما با این کد ها فولدر ادمین رو هم فراخوانی کنین بدون لاگین وارد میشه چون تنظیمات کانفیگش مثل فولدر یوزره
سوال: چطور مقدار فیلد role جدول tblusers که 1 مساوی ادمین و 0 مساوی یوزره وارد Authentication کنم و تنظیمات فولدر ادمین رو چی بزارم که فقط رل مربوطه رو راه بده؟!!!
مثال زیاد بود اما هیچ کدوم برای من مفهوم نبود
ممنون میشم راهنمایی کنین

Mostafa_Dindar
چهارشنبه 22 اردیبهشت 1389, 15:45 عصر
با سلام
من یک تیبل دارم که به غیر از فیلد هایی مثل یوزر و رمز و ایمیل و ... یک فیلد بنام role داره که اگر صفر باشه از دید برنامه من یوزر معمولیه و اگر 1 باشه ادمین
دو تا فولدر دارم فولدر users و فولدر admin
من وب کانفیگ فولدر یوزر رو به این صورت نوشتم


<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
</configuration>
و توی کانفیگ اصلی برنامه خط زیر رو اضافه کردم


<authentication mode="Forms">
<forms defaultUrl="./" loginUrl="~/login.aspx" timeout="3000" name="abcd" />
</authentication>
اما مشکل من با فولدر ادمینه که چطور از روش بالا استفاده کنم اما با این تفاوت که اگر فیلد role 0 بود بره فولدر یوزر و اگر 1 بود بره فولدر ادمین
اگر همون کد کانفیگ فولدر یوزر رو داخل فولدر ادمین هم بزارم قائدتا هر یوزری درست لاگین بکنه به فولدر ادمینم هم دسترسی داره
یه مقدار مبهمه که چطور مشکل رو رفع کنم
ممنون میشم راهنمایی کنید


سلام ,

<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>

اشتباست , در خط اول شما همه کاربرانی که Authenticate نشدند رو رد میکنی و در خط بعدی همه کاربران رو اجازه میدی , خط دوم رو بردار . همون خط اول کافیه .

komeil64
چهارشنبه 22 اردیبهشت 1389, 16:02 عصر
خب این برای یوزر ها
ادمین چی؟!

Mostafa_Dindar
چهارشنبه 22 اردیبهشت 1389, 16:11 عصر
خب این برای یوزر ها
ادمین چی؟!

Admin وقتی که Authenticate کرد ( یعنی نام کاربری و کلمه عبور رو زد و قبول شد ) دیگه جز, کاربران ? نیست . شما فقط کاربران ناشناخته رو محدود کردید . و برای شناخته شده ها مشکلی نیست , میتونند به صفحه مورد نظر دسترسی داشته باشند . ولی کاربر ثبت نام کرده دیگری غیر مدیر دارید باید Role تعریف کنید

در صورتی که Role دارید میتونید Role مدیر رو اجازه ورود بدبد و Role های دیگر رو محدود کنید (در وب کانفیگ )

komeil64
چهارشنبه 22 اردیبهشت 1389, 16:28 عصر
خب مشکلم همینه
من یه فیلد role دارم که 0 یوزر و 1 ادمینه توی رکوردهاش
نمی دونم چطوری این role رو اضافه کنم به تنظیمات Authenticate

اوبالیت به بو
سه شنبه 28 اردیبهشت 1389, 18:13 عصر
دوستان کسی نمی تونه راهنمایی کنه؟!


http://barnamenevis.biz/forum/showthread.php?t=151579&highlight=Authorization
http://barnamenevis.biz/forum/showthread.php?t=169722&highlight=Authorization
http://barnamenevis.biz/forum/showpost.php?p=770851&postcount=6
http://barnamenevis.biz/forum/showthread.php?t=178948&highlight=Authorization
http://barnamenevis.biz/forum/showpost.php?p=868053&postcount=2


اینم جالبه:

http://barnamenevis.biz/forum/showthread.php?t=122012&highlight=Authorization

komeil64
سه شنبه 28 اردیبهشت 1389, 19:49 عصر
توي تمام اين مثال ها گفته شده داخل فولدر ادمين يه کانفيگ بزاريم فقط دسترسي به ادمين بديم و داخل فولدر يوزر يه کانفيگ بزاريم و به يوزر دسترسي بديم
تا اينجاش واضحه
توي کانفيگ اصلي پروژه هم ميزنيم که صفحه لاگين چه صفحه ايه
اما
مشکل من اينجاست
وقتي توي لاگين چک مي کنيم یوزر و پس درسته و فيلد رولش مثلا ادمينه
اولا:چطوري ارتباط بديم با کانفيگ که از اون چک کنه بايد به کدوم فولدر بره؟
ثانيا:اگر فرستادش به فولدر يوزر و کاربر بصورت دستي آدرس فولدر ادمين رو داد از روي چي چک مي کنه که دسترسي نداره؟!
مشکل اصليم سوال اوله
ممنون میشم با یه مثال راهنمایی کنید

komeil64
چهارشنبه 29 اردیبهشت 1389, 14:11 عصر
سلام
دوستان من تمام لینک ها رو دیدم اما برام جا نیفتاده چطور رول مربوطه رو به وب کانفیگ فولدر بشناسونم
ببینین
این کانفیگ روت سایته:


<authentication mode="Forms">
<forms loginUrl="default.aspx"></forms>
</authentication>


این کانفیگ فولدر ادمین:


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

</authorization>

</system.web>
</configuration>


اینم کانفیگ فولدر یوزر


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

</authorization>

</system.web>
</configuration>


اینم کد لاگین:


SqlConnection sconnlogin = new SqlConnection(ConfigurationManager.ConnectionStrin gs["scocConnectionString"].ToString());
string uname = TextBox1.Text;
string hashpass = FormsAuthentication.HashPasswordForStoringInConfig File(TextBox2.Text, "MD5");
SqlCommand scommlogin = new SqlCommand("select password from tbl_users where user_name='" + TextBox1.Text.ToLower() + "'", sconnlogin);
if (sconnlogin.State != ConnectionState.Open) sconnlogin.Open();
SqlDataReader sdrlogin = scommlogin.ExecuteReader();
while (sdrlogin.Read())
{


if (hashpass.ToString().ToLower() == sdrlogin[0].ToString().ToLower())
{


FormsAuthentication.RedirectFromLoginPage(TextBox1 .Text, false);

Response.Redirect(***************);

}
else
{
Label1.Text = "اطلاعات ورود صحیح نمی باشد،لطفا با مدیر سیستم تماس بگیرید";
}

}
sconnlogin.Close();


خب توی این کد اصلا رول چک نمیشه.ضمنا فیلد role توی همین جدول tbl_user هستش
ابهام و سوالم اینجاست:
خب توی سلکت چک می کنیم اگر یوزر و پس درست بود فیلد رول رو چک کن اگر ادمین بود برو فولدر ادمین اگر یوزر بود برو فولدر یوزر
سوال: چطور به وب کانفیگ هر کدوم از این فولدر ها بفهمونم کسی که الان وارد شد رولش ادمینه یا یوزره که اگر نبود بندازتش بیرون
!!!؟؟؟

komeil64
چهارشنبه 29 اردیبهشت 1389, 17:04 عصر
من با جایی نرسیدم تصمیم گرفتم با کوکی کار کنم
راهنمایی خاصی نیستم در مورد سوال بالا؟!