PDA

View Full Version : طریقه ساخت فرم لاگین با سطح دسترسی کاربران



eletcomp
یک شنبه 04 خرداد 1393, 16:10 عصر
با سلام بر عزیزان
میخواستم بدونم چطور می توان یک فرم لاگین با سطح دسترسی محدود برای کاربران بسازم!!! به روش sql command : ado.net
البته کد ساخت فرم لاگین را دارم !!! ولی پروسه محدود کردن کاربران نمی دانم؟؟؟ میخوام یک چیزی مثل عکس ها باشد!!
لطفا اگر نمونه کدی سراغ دارید :قرار بدهید!!
119465

119466



سپاس

gjmkdyttyhujk
یک شنبه 04 خرداد 1393, 21:32 عصر
یدونه type برای هرکاربر در پایگاه تعریف میکنی مثلا کاربر علی و رضا دارای سطح دسترسی admin هستند. بعد میای هنگام لاگین کاربر type اون کاربر رو بررسی میکنی. اگر نوع کاربر به طور مثال admin بود فلان چیز ها را میتونه ببینه و اگر user بود فقط میتونه به این فرم ها بره.همین.

eletcomp
یک شنبه 04 خرداد 1393, 21:45 عصر
ممنون دوست عزیز: این چیز ها را می دونم!! منظورم این هست باید چه نوع کوئری ای براش نوشت!! لطفا نمونه کد قرار بدهید!!
سپاس

gjmkdyttyhujk
دوشنبه 05 خرداد 1393, 01:06 صبح
فرض کنید که یک فرم دارید که در اون سه باتن دارید.اولی برای ویرایش اطلاعات مدیر نرم افزار، دومی برای ویرایش اطلاعات کاربر ویژه، سومی برای ویرایش اطلاعات کاربر معمولی. بعد شما یک table دارید که در اون سه تا فیلد دارید با نام های نام کاربر، رمز عبور، سطح دسترسی یا نوع کاربر. وقتی مشتری وارد سیستم می شود شما اطلاعات 3 تا ستون رو از پایگاه با اطلاعات وارد شده بررسی میکنید میبینید که به طور مثال کاربر ویژه وارد سایت شده(اینم که احتمالا میدونید چجوریه، کوئریتون به این صورت میشه:select usertype from user table where username=textbox1.text and password=textbox2.text) بعد مقدار fetch شده از table رو در یم متغیر سراسری با نام usertype قرار میدید. بعد هنگام لود شدن فرمی که در خطوط بالا در موردش توضیح دادم یه if قرار میدید که اگر نوع کاربر برابر با مثلا کاربر ویژه باشد باتن اول و باتن سوم disable شود ولی باتن دوم enable شود و بعدش هم بقیه ماجرا. نوشتن کدش هم خیلی آسون هست.

eletcomp
دوشنبه 05 خرداد 1393, 12:42 عصر
دوست عزیز ممنون: یک سئوال: من میخوام از روش sql command کد بنویسم!! الان باید از شی data reader کنم یا dataadapter ؟؟؟
راستی اگر مقدار fetch شده که اسم ستون هست را به یک متغیر سراسری نسبت بدهیم!! ایا خودش می شناسد؟؟ مشکلی پیش نمیاید؟؟
سپاس

gjmkdyttyhujk
دوشنبه 05 خرداد 1393, 19:10 عصر
البته خدمتتون عرض کنم که جواب این سوالتونو میتونستید با یه سرچ کوچیک در سایت یا اینترنت پیدا کنید چیزهای جدیدی یاد می گرفتید ولی عیب نداره. شما یک شی از نوع sqlcommand درست می کنید و کوئریتون رو اونجا مینویسید بعد یک شی هم از نوع datareader درست می کنید و اون رو برابر شی sqcommand.executereader() قرار میدید و بعد به شی datareader میگید که read()کنه اگه درست بود یعنی ture بود میتونید بقیه کارها رو انجام بدید. مثلا رفتن به صفحه اصلی نرم افزار. در مورد سوال دومتون که گفتید آیا خودش میشناسد منظورتون رو نفهمیدم. واضح تر توضیح بدید منظورتون چیه؟

gjmkdyttyhujk
دوشنبه 05 خرداد 1393, 19:25 عصر
افزونه ها به پست قبلی:

sqlcommnad com0=new sqlcommnad("select felen from felan where felen=felen")
sqldatareader sdr0=com0.executereader()
if(sdr0.read()==true)
usertype=sdr0["usertype"].tostring();
//usertype رو به صورت سراسری تعریف میکنید و در اینجا مقدار دهی می کنید.
else
messagebox.show("wrong username or password")

eletcomp
دوشنبه 05 خرداد 1393, 19:58 عصر
ممنون دوست عزیز: کد فرم لاگین من این هست!!! تقریبا شبیه کد شما هست!!! ایا با همین کد من :میشه کد شما را ترکیب کرد؟؟ کجاش باید دستکاری بشود؟؟
راستی منظور شما از کلمه usertype چی هست؟؟؟ نام ستون هست؟؟
سپاس


if (txtuser.Text == "" || txtpass.Text == "")
{
MessageBox.Show("لطفا فیلدهای خالی را پر کنید");
}


else
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = "select * from Tbl_login where username='" + txtuser.Text + "' and password='" + txtpass.Text + "'";
SqlDataReader dr = cmd.ExecuteReader();


if (dr.Read())
{
this.Hide();
new main().ShowDialog();
}
else
MessageBox.Show("نام کاربری یا کلمه عبور اشتباه است");

gjmkdyttyhujk
دوشنبه 05 خرداد 1393, 22:49 عصر
بله میشه ترکیب کرد. usertype هم نام ستون هست. من به خاطر این مقدار اون رو داخل یک متغییر ریختم که وقتی که خواستم نوع کاربر رو بدونم دوباره از دیتابیس برش ندارم. سطح دسترسی هم به آسانی با این کدها ساخته میشه. سوال دومتون خیلی خنده دارهD-: من یک شی از sqldatareader با نام sdr0 ساختم و شما هم یک شی از همون کلاس با نام dr ساختید.پس داخل if دومتون کد من رو می تونید قرار بدید.

eletcomp
سه شنبه 06 خرداد 1393, 00:15 صبح
سوال دومتون خیلی خنده داره
ممنون دوست عزیز:شما حرفه ای هستی ها!!! ولی من داغون!:لبخند:
دوست عزیز :لطف کن یک دستی بر سر کد ما بکش(ترکیب کن):چون زودتر این موضوع به خاتمه میرسه!!!! و من از هنگ در میام!!!!
من توی اینترنت خیلی گشتم ولی به چنین چیزی نرسیدم!!! نه در سایت خارجی و نه ایرانی!!
سپاس

gjmkdyttyhujk
سه شنبه 06 خرداد 1393, 19:42 عصر
نه دوست عزیز. انقدر مشکل تو برنامه نویسی دارم که از حساب و کتاب خارجه. اینکه گفتم سوالتون خنده داره به این خاطر هست که شما جسارت نشه اصول رو یاد نگرفتید، فرض کنید من به شما میگم پژو یک نوع ماشین هست و همه ماشین ها حرکت میکنند و ما در اینجا از ماشین پیکان استفاده کرده ایم. بعد شما برمیگردی میگی که آیا پیکان هم حرکت میکنه. تو اینجا هم من اسم شی sqldatareader رو sdr نوشتم شما dr. هر دو از یک نوع هستند و تمام ویژگی های sqldatareader رو دارند.

ان شا الله مشکلتون حل بشه.
ضمنا اگه انگلیسیتون متوسط رو به بالا هست تو سایت codeproject.com یا stackoverflow عضو بشید یا به اونها سر بزنید سایت های خیلی خوبی هستند.

eletcomp
سه شنبه 06 خرداد 1393, 21:09 عصر
ممنون دوست عزیز:


ضمنا اگه انگلیسیتون متوسط رو به بالا هست تو سایت codeproject.com یا stackoverflow عضو بشید یا به اونها سر بزنید سایت های خیلی خوبی هستند
توی stackoverflow عضو هستم!! و تا حالا چند بار به من کمک کردند!! خیلی سایت خوبی هست!! ولی توی این مورد انگار هیچ کس بلد نیست!! یا نمیخواد توضیح بده!!
لطفا این 2 خط کد را توضیح بده و تمام!!

if(com.executenonquery()==1)
این خط یعنی چی؟؟؟ یعنی ستون را انتخاب کند؟؟؟ مثلا یوزر و بعد ببیند که ایا ادمین هست یا نه؟؟؟ شما اینجا از 1 استفاده کردید!!

usertype=sdr0["usertype"].tostring();
این خط هم لطفا توضیح دهید!!
سپاس

gjmkdyttyhujk
چهارشنبه 07 خرداد 1393, 01:24 صبح
در مورد خط اول باید بگم که شما وقتی می خواهید یک نفر وارد سیستمتون بشه یعنی لاگین کنه اطلاعات خودش رو وارد میکنه. تابع executenonquery() نتیجه ی اجرای کوئری رو بر میگرداند یعنی تعداد سطرهایی که با استفاده از اجرای کوئری بدست آمده اند. مطمئنا باید یک سطر نتیجه ی اجرای کوئری باشد. وقتی شما کوئری تون رو در sqlserver اجرا میکنید نتیجه ای که درپایین صفحه به شما نشون داده میشه تعداد سطرهای نتیجه ی اجرای کوئری هست. که منطقا برای لاگین یک نفر باید جوابش یک باشد. تونستم برسونم؟این سطر همون رو میده


در مورد خط دوم
شی sdr0 میتونه مقدار ستون ها رو در خودش نگهداری کنه و با استفاده از sdr0["usertype"] می تونیم مقدار ستون usertype جدول رو در اون قرار بدیم. در این خط کد هم گفتیم که مقدار ستون usertype که در اجرای کوئری بدست اومده رو داخل متغییر usertype قرار بده. اولی متغییر از نوع string است و اونی که داخل کوتیشن گذاشتیم نام ستون هست.