PDA

View Full Version : سوال: سطح دسترسی کاربربه



asd_moghadas
سه شنبه 29 اردیبهشت 1388, 10:22 صبح
سلام به دوستان
کمک فوری درزمینه سطح دسترسی کاربربه منوهای فرمها
من خیلی سرچ کردم هم درسایت وهم درگوگل اماتمام موارد تئوریک بودن حالامشکل من اینه که من یک فرم برای تعریف کاربر دارم که توی اون باچند چک باکس جدول یوزرم را0و1 میکنم حالا میخوام موقع لوگین کردن به برنامه
1-برنامه تشخیص بده که چه کاربری اکنون وارد شده
2-ایا این کاربر مجوز دسترسی به منوی مربوطه رادارد
3-درصورت نداشتن مجوز پیام مناسب

از دوستان خواهش میکنم اگه امکان داره باکد توضیح بدهند.
وبا عذرخواهی ازدوستان میدانم دراین مورد بحث زیادشده اما مباحث تاانجا که من طی چندروز گذشته سرچ کردم بیشتر تئوری بود (c#)
ممنون :متفکر:

happy65_sh
سه شنبه 29 اردیبهشت 1388, 11:19 صبح
من یک فرم برای تعریف کاربر دارم که توی اون باچند چک باکس جدول یوزرم را0و1 میکنم
این یعنی چی؟؟:متفکر:

1-برنامه تشخیص بده که چه کاربری اکنون وارد شده
مطمئنا یک جدول داری که کد کاربر و نام عبور و رمز عبورشون را ذخیره می کنی.برای اینکه تشخیص بدی چه کاربری وارد شده کافیه چک کنی که اون یوزر و پسوورد متعلق به چه کسی هست و یک متغیر در برنامه ات تعریف کنی واگه کاربر یوزر و پسووردش را درست وارد گرد اون متغیر را برابر کد اون کاربر قرار بدی.به این صورت همیشه به کد اون کاربر و در نتیجه سایر اطلاعاتش دسترسی داری


SqlCommand karbar = new SqlCommand("select kcode from yourtable where user=@user and pass=@pass", connection);
karbar.Parameters.AddWithValue("@user", youruser);
karbar.Parameters.AddWithValue("@pass", yourpass);
SqlDataReader dr = karbar.ExecuteReader();
if(dr.Read())
{
yourchangablevalu = dr[0].ToString();
dr.Close();
}
else
{
MessageBox m = new MessageBox("", " نام عبور یا رمز عبور اشتباه است");
m.ShowDialog();
dr.Close();
}

asd_moghadas
سه شنبه 29 اردیبهشت 1388, 11:52 صبح
سلام به دوست عزیز که کمک کردن
درمورد اول که پرسیده بودین ؟منظور فرم تعریف کاربران بود
ومورد دوم یعنی درفرم لودم بنویسه کاربر جاری = asd
yourchangablevaluبعنی چی؟
واین کدرادرموعق لوگین بنویسم یعنی درموقع کلیک روی باتون یا درفرم لودفرم دومم

happy65_sh
سه شنبه 29 اردیبهشت 1388, 12:29 عصر
yourchangablevaluبعنی چی؟
همان متغیر سراسری برنامه (نه فرم) را بااین نام نوشته ام

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

asd_moghadas
چهارشنبه 30 اردیبهشت 1388, 07:58 صبح
سلام
من روش شمارو امتحان کردم اما من 1 جدول دارم که توی ان یک ستون یوزرنیم ویک ستون پسورد وچندستون دیگه که در این ستونها از نوع bit یا tiynitهستن ومن درموقع تعریف کاربر این ستونها را باشرط ifچک میکنم که اگه تیک chekbox فلان منو خورده شده مقدار این ستونهای جدول به 1واگه نه به 0 ثبت بشه در dbوtb_userحلا مشکل من دقیقا سر خواندن مقدار این ستونهاست که اگه 1بود هنگام ورود کاربر انها هم چک بشه وکاربر دسترسی تعریف شده خودشو داشته باشه ممنون میشم راهنمایی کنید واقعا در این مورد هنگ کرده ام

happy65_sh
چهارشنبه 30 اردیبهشت 1388, 11:31 صبح
سلام
دوست عزیز
من نمی دونم منوی شما چه شکلی هست که تونستید برای هرکدوم در جدول کاربران یک فیلد در نظر بگیرید اگه اینقدر منوتون کوچک هست خوب با چند تا if چک کنید مقدار اون در جدولتون True هست یا False بعد هم بر اساس اون Visible ها را True یا False کنید..
اما در کل فکر نمی کنم نگهداری اینهمه اطلاعات در یک جدول کار صحیحی باشه بهتره برای جدول کاربرت یک فیلد کد تعریف کنی و اطلاعات مربوط به منوهات را در جدول جداگانه ای نگه داری(یک جور آینده نگری..:لبخند:شاید سال دیگه منوهات 5 برابر الان بشه اونوقت..:گریه:)
و بعدمی تونی به راحتی حتی از طریق یک کلاس امکان دسترسی کاربر به قسمت های مختلف را جستجو کنی.
موفق باشی

asd_moghadas
چهارشنبه 30 اردیبهشت 1388, 14:17 عصر
سلام
من یک جدول برای سطح دسترسی ایجاد کردم ویک جدول برای یوزروپسورد که سطح دسترسی رابا جدول اول چک کنم اما نمیدونم چگونه وازچه کلاسی استفاده کنم اگه امکان داره درقالب کد توضیح بدین ممنون

happy65_sh
چهارشنبه 30 اردیبهشت 1388, 14:58 عصر
بعدمی تونی به راحتی حتی از طریق یک کلاس...
مثلا یک کلاس ساده می تونه این باشه:
من فرض کرده ام جدول کاربرانم شامل کد,یوزر و پسوورد باشه و جدول دیگر که بانام aemal مشخص می شه و سطح های دسترسی را نشون می ده شامل کد کاربر,نام(منوهایی که کاربر اجازه دسترست به آنها را داره) و یک فیلد که نشانه True یا False بودنش هست(let)


SqlCommand com = newSqlCommand("select name,let from aemal where kcode=kcode", connection);
SqlDataReader dr = com.ExecuteReader();
if(dr.read())
{
if(dr[1].ToString()=="True")
return "True";
else
return "False";
}

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

asd_moghadas
پنج شنبه 31 اردیبهشت 1388, 08:04 صبح
من کد شمارو تست کردم وکوئری که نوشتم به صورت:


SqlCommand com = newSqlCommand("select let from aemal where kcode=@kcode", connection);
SqlDataReader dr = com.ExecuteReader();
if(dr.read())
{
if(dr[0].ToString()=="True")
lable1.enble=true;
else
lable1.enble=false;

}

دوتامشکل پیداکردم
1-مقدار kcode=باچی قراربدم چون جدول یوز با جدول aemale جوین شده من یک فیلد تعریف کردم به نام record Idومقداراون درموقع ثبت Id جدول یوزرباهم برابر میشه یعنی همیشه ID=Rcor idوبرای دسترسی کاربرانم فقط let درجدول ثبت میشه که من منظور شمارا از نام متوجه نشدم (کند ذهنی )که چطور مثال lable 1رادر جدول داشته باشم ودرموقع تعریف کاربر بگم که کاربر به اون دسترسی داشته باشه یا نه وبعد از لاگین چک کنم
2-کد شما را وقتی به صورت فوق نوشتم چه true وچه falseیک کار انجام داد بعنی lable1.enable همیشه برابرfalseبود
حلا راهنمایی کنید مشکل واشتباه من در کجاست ؟

happy65_sh
پنج شنبه 31 اردیبهشت 1388, 10:43 صبح
مقدار kcode را باید برابر yourchangablevalu یعنی همون متغیر سراسری برنامه ات که کد کاربر را در اون ریخته ای قرار بدی

من منظور شمارا از نام متوجه نشدم (کند ذهنی
اولا منظورم از نام :ببین مثلا تو توی منویی که طراحی کردی سه قسمت زیر را داری:
تعریف کاربر تغییر کاربر اصلاح کاربر
منظور من دقیقا همین عناوین هست.مثلا توی جدول aemal یه نمونه به صورت زیر ذخیره شده:

تعریف کاربر 1 True
تغییر کاربر 1 True

این به این معنی هست که کاربر با کد 1 اجازه دسترسی به تعریف و تغییر کاربر را داره.برای اعمال این مطلب در برنامه فرض کن تکه کد تاپیک قبلی را در یک کلاس با نام finddastresy در تابع find نوشته ایم پس:



if(finddastresy.find("تعریف کاربر"))
buttontaerif.Visible=True;


دوما این اصلا ربطی به کند ذهنی یا تند ذهنی نداره...من فقط روی این موضوع توی برنامه ام کارکرده ام

asd_moghadas
شنبه 02 خرداد 1388, 08:04 صبح
سلام
من کد شمارا امتحان کردم وبه صورت کد زیر در فرم لاگین دراوردم وبرای لاگین مشکلی ندارم

private long SelectPass()
{
long Pass = 0;
Maine_Form m=new Maine_Form();

try
{
SqlCon = new SqlConnection();
SqlCon.ConnectionString = Nezarat.Properties.Settings.Default.Nezarat_dataCo nnectionString;
SqlCon.Open();
SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandType = CommandType.Text;
SqlCmd.CommandText = "SELECT UserID, Password FROM Tb_Users WHERE (UserName =@username)";
SqlCmd.Parameters.Add("@username", SqlDbType.NVarChar).Value = Cmb_User.SelectedItem.ToString();

SqlDA = new SqlDataAdapter();
SqlDA.SelectCommand = SqlCmd;
SqlCmd.ExecuteNonQuery();
DTable = new DataTable();
SqlDA.Fill(DTable);
if (DTable.Rows.Count > 0)
{
Pass = long.Parse(DTable.Rows[0].ItemArray[1].ToString());

}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{

SqlCon.Close();
}
return Pass;
}

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

private void Accesslevel()
{
byte id = 0;
Frm_Password f = new Frm_Password();
//try
//{
SqlCon = new SqlConnection();
SqlCon.ConnectionString = Nezarat.Properties.Settings.Default.Nezarat_dataCo nnectionString;
SqlCon.Open();
SqlCmd = new SqlCommand();
SqlCmd.Connection = SqlCon;
SqlCmd.CommandType = CommandType.Text;
//SqlCmd.CommandText = SqlCmd.CommandText = "SELECT UserID, Password FROM Tb_Users";// WHERE (UserID =@UserID)";//UserName
SqlCmd.CommandText = "SELECT UserID FROM Tb_Users WHERE (UserID =@UserID)";
SqlCmd.Parameters.Add("@UserID", SqlDbType.TinyInt).Value = AccessID;
AccessID = (byte)SqlCmd.ExecuteScalar();
//SqlCmd.ExecuteNonQuery();
SqlCmd.CommandText = "SELECT lIdRecord,Gozareshat FROM Tb_AccessLevel WHERE(lIdRecord=@lIdRecord)";
SqlCmd.Parameters.Add("@lIdRecord", SqlDbType.TinyInt).Value = AccessID;

SqlDataReader dr = SqlCmd.ExecuteReader();
if (dr.Read())
{
if (dr[1].ToString() == "True")
{
Gozareshat.Enabled = true;
}
else
Gozareshat.Enabled = false;
}
label1.Text = AccessID.ToString();
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message);
//}
//finally
//{
// SqlCon.Close();
//}
}

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

asd_moghadas
شنبه 02 خرداد 1388, 12:05 عصر
کسی نبود راهنمایی کنه ؟

asd_moghadas
یک شنبه 03 خرداد 1388, 07:57 صبح
سلام به دوستان
مشکل من دقیقا خواندن مقدار ایدی درفرم لاگین مقدار دهی به پروپرتی سراسری در برنامه است لطفا کمک کنید تنها مقدار سطر اول ار تیبل رامیگیره یعنی همیشه AccessID=1