ورود

View Full Version : احراز هویت



A.Yousefi
دوشنبه 04 اردیبهشت 1391, 23:12 عصر
سلام
من میخوام سیستم ورود به سایتمو خودم با استفاده از توسعه ی Membership خود دات نت بسازم.
البته نمیخوام مستقیم از ابزاری که تو بخش لاگینه استفاده کنم بلکه همه چیز حتی فرم لاگین رو خودم طراحی کردم.

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


<


authentication mode="Forms">

<


forms loginUrl="~/NotLogin.aspx" timeout="2000" defaultUrl="~/Admin/Admin.aspx" name="MyCookie" />

</


authentication>

این تا اینجای کار،بعد یه وب کانفیگم تو پوشه ادمین اینجاد کردم و اینو نوشتم توش:


<


configuration>

<


system.web>

<


authorization>

<


deny users="?"/>

</


authorization>

</


system.web>

</


configuration>

به این ترتیب هر کسی بخواد پیجای تو این پوشرو ببینه باید قبلش لاگین کنه.
فرض کنید ادمین ما هم علی با رمز 123 هست پس کد دکمه لاگین هم اینه:


if


(txtUsername.Text=="Ali" && txtPassword.Text=="123")

{



FormsAuthentication.RedirectFromLoginPage(txtUsern ame.Text, chkRemember.Checked);

}

همه چیز اکیه و بخوبی کار میکنه،حالا یه سوال:
من میخوام یه پوشه هم برای کاربرای عضو(کارمند،مشتری یا هرچیز دیگه) در نظر بگیرم و ترتیبی بدم تا این کاربرا هم یه سری پیج هایی رو ببینن که کاربرای غیر عضو یا معمولی نمیتونن ببینن.
برای این منظور باید چیکار کنم؟
دوباره باید مثه همون ادمین عمل کنم و یه وب کانفیگ عین همون بندازم توش؟
موقع لاگین کردم چجوری باید عمل کنم؟
آیا باید موقع لاگین با استفاده از یه DropDownList از طرف بخوام نقش کارمند یا ادمینو انتخاب کنه بعد لاگین بزنه؟
در این صورت کد دکمه لاگین چی میشه؟
تو وب کانفیگ اصلیم باید چه تغییراتی بدم؟
آخه اونجا گفتم : defaultUrl=~/Admin/Admin.aspx
ولی این کد برا وقتیه که فقط یه کاربر داشته باشم و اونو بعد لاگین به پیج ادمین هدایت کنم.
الان که میخوام دو تا کاربر داشته باشم و بعد زدن دکمه لاگین با توجه به انتخاب گزینه ادمین یا کارمند از کمبوباکس اونو به صفحه مورد نظر هدایت کنم باید چیکار کنم؟
ممنون میشم راهنماییم کنین.

raziee
دوشنبه 04 اردیبهشت 1391, 23:42 عصر
با درود
شما باید برای کاربرانتون "نقش کاربری" تعریف کنید.
و بر اساس اون نقش کاربری دسترسیشون رو محدود کنید.
بعد از لاگین، نقش کاربری مشخص شده و به صفحه ی مربوطه هدایت میشه.
در مورد Role و پیاده سازی اون جستجو کنید.

sarapepors
سه شنبه 05 اردیبهشت 1391, 10:03 صبح
سلام این لینک (http://barnamenevis.org/showthread.php?257287-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%84%D8%A7%DA%AF%DB%8C%D9%86&highlight=%D9%84%D8%A7%DA%AF%DB%8C%D9%86) کمکتون میکنه.

A.Yousefi
چهارشنبه 06 اردیبهشت 1391, 16:28 عصر
سلام
من کلی تحقیق کردم،لینکی که sarapepors داد رو علاوه بر کلی لینک دیگه دیدم و به اینجا رسیدم:
برای اینکه من کاربرام رو به دو دسته مدیر و کارمند تقسیم کنم در ساده ترین حالت دو تا تیبل درست کردم.
یکی تیبل User هست که Username,Password و RoleID کاربرا رو نگه میداره،RoleID هم از نوع خارجیه که مقدارش از فیلد RoleID تیبل Roles تامین میشه.
تیبل Rolesام یه RoleID داره و یه RoleName .
خب این از دیتابیس.
یه فولدر برای Admin و یکی هم برای Employe درست کردم،توی هر کدومشونم یه وب کانفیگ اضافه کردم و اینو نوشتم:

<?


xml version="1.0"?>

<


configuration>

<


system.web>

<


authorization>

<


allow roles="Emplye"/>

<


deny users="*"/>

</


authorization>

</


system.web>

</


configuration>


اینم توی فولدر ادمین نوشتم:

<?


xml version="1.0"?>

<


configuration>

<


system.web>

<


authorization>

<


allow roles="Admin"/>

<


deny users="*"/>

</


authorization>

</


system.web>

</


configuration>


حالا برای اینکه بتونم هر کدوم رو بعد از لاگین کردن با توجه به نقشی که دارن هدایت کنم به صفحه مورد نظر تو وب کانفیگ اصلی این کد رو نوشتم:

<


roleManager defaultProvider="SiteRoleProvider" enabled="true">

<


providers>

<


clear/>

<


add name="SiteRoleProvider" type="MySecurityExample.Roles"/>

</


providers>

</


roleManager>

Roles اسم کلاسیه که از RoleProvider ارث برای کرده و MySecurityExapmle هم اسم پروژمه.
حالا بریم سراغ کلاس Roles:
این کلاس از کلاس RoleProvider ارث بری کرده و متد زیرش Override شده:

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


این متد مقدار Admin یا Emplye رو برمیگردونه.
به این ترتیب میفههم کاربری که میخواد لاگین کنه Roleش چیه.
حالا سوال:
مشکل من تو نوشتن کد مربوط به دکمه لاگین هست:
وقتی کابر Username و Password ش رو وارد کرد و روی دکمه لاگین کلیک کرد تو رویداد کلیک اون باتن باید چی بنویسم که با توجه به نقشی که داره به صفحه Admin هدایت شه یا Emplye?
در ضمن تو فولدر مربوط به Admin یا Emplye جندین پیج وجود داره،آیا باید تو پیج لود همه اونا نقش کاربر رو چک کنم؟
ممنون میشم یکی به من کمک کنه تا بتونم کد مربوط به دکمه لاگین رو بنویسم؟
اگه جایی رو اشتباه رفتم بگین لطفا.

A.Yousefi
چهارشنبه 06 اردیبهشت 1391, 20:51 عصر
یه سوال دیگه که برام پیش اومده اینه که متدهای کلاسی که از کلاس RoleProvider مشتق شده،کی اجرا میشه؟

A.Yousefi
پنج شنبه 07 اردیبهشت 1391, 16:29 عصر
آیا دستوری وجود داره که بشه باهاش DefaultUrl رو از طریق کد نویسی تغییر داد؟
وقتی که به این دستور میرسه:



FormsAuthentication.RedirectFromLoginPage("AdminUserName", true);


به صورت خودکار ابتدا رویداد GetUsersInRole فراخوانی میشه و بعد که نقش کاربر تشخیص داده شد (Admin) وارد پیج مخصوص ادمین میشه،اما مسئله ای که هست اینه که وقتی کارمند قصد ورود داره چون DefaultUrl روی پیج ادمین ست شده و رویداد GetUsersInRole هم مقدار Emplye رو برمیگردونه اون موقع دیگه اجازه ورود به کارمند رو نمیده،چون DefaultUrl روی پیج Admin ست شده،من میخوام با یه if چک کنم که اگه رویدادGetUsersInRole مقدار Admin رو برگردوند DefaultUrl بشه Admin و بره تو پیج Admin و اگه Employe رو برگردوند مقدار DafaultUrl ام بشه پیج کارمند و بره تو پیج کارمند.
حالا اگه ممکنه منو تو نوشتن این تیکه کد کمک کنید لطفا.