PDA

View Full Version : آموزش: فرم لاگین با سطح دسترسی



ghasem110deh
پنج شنبه 27 شهریور 1393, 18:53 عصر
آموزش طراحی فرم لاگین با سطح دسترسی با تکنولوژی ADO.net
منبع (فیلم آموزشی از لرن فایلز)

طراحی جدول (User)
درون بانک (اینجا sql) به فیلدهای زیر نیاز است : (در گزینه های از نوع bit مقدار - true و یا false ذخیره میشود)

ghasem110deh
پنج شنبه 27 شهریور 1393, 19:15 عصر
در ادامه اضافه کردن یک کلاس جدید به پروژه (اینجا DataAccess)
در واقع کلاس DataAccess لایه اول در این پروژه است ...
.
.
.
ابتدا ایجاد دستورات sql و ایجاد dataAdapter :


SqlConnection con;
SqlCommand com;
SqlDataAdapter da;

public DataAccess()
{
con = new SqlConnection();
com = new SqlCommand();
da = new SqlDataAdapter();
com.Connection = con;
da.SelectCommand = com;
}

حال ایجاد متد اتصال و قطع آن (اینجا Connect و Disconnect)


public void Connect()
{
if (con.State != ConnectionState.Open)
{
con.ConnectionString = @"Data Source=.;Initial Catalog=Test;Integrated Security=True";
con.Open();
}
}

public void Disconnect()
{
con.Close();
}

ایجاد متد دستورات (query) :


public void Execute(string SQL)
{
com.CommandText = SQL;
com.ExecuteNonQuery();
}

و در آخر ، ایجاد dataTable :


public DataTable SELECT(string SQL)
{
DataTable dt = new DataTable();
com.CommandText = SQL;
da.Fill(dt);
return dt;
}

البته جهت یادآوری : میبایست فضای Data.sqlClient را فراخوانی کنید (using) !

ghasem110deh
پنج شنبه 27 شهریور 1393, 20:12 عصر
ایجاد کلاس (در اینجا Users) ... یا در واقع لایه دوم برنامه :

گفته شد که در فیلدهای نوع bit مقادیر true یا false قرار میگیرد ... که در واقع بیان کننده سطح دسترسی هر کاربر هستند !
بدین صورت که اگر هر چهار متغیر دارای مقدار true باشند ، چهار کلید فرم اصلی ببرنامه فعال میشوند ! (بجای کلید میتوان از هر کنترل دیگر استفاده کرد - در اینجا دو کلید ، یک منو و یک جعبه ابزار(toolStrip) استفاده شده)
.
.
.
ایجاد Dataset و چند متغیر (در اینجا چهار متغیر به تعداد فیلدهای از نوع bit) ؛


DataAccess DA = new DataAccess();

public static bool M = false;
public static bool S = false;
public static bool B1 = false;
public static bool B2 = false;


public int ID;
public string Nam;
public string Pas;
public bool Mnu;
public bool Str;
public bool Btn1;
public bool Btn2;

همانطور که مشاهده مینمایید : متغیر های سطح دسترسی در حالت پیشفرض - false هستند .
تذکر : متغیر های سطح دسترسی جهت قابل دسترس بودن در تمام برنامه از نوع static هستند !

ایجاد متد سطح دسترسی :


public void Sath(string name) {
DA.Connect();
string sql = "Select * From [User] Where Nam = '{0}' ";
sql = string.Format(sql, name);
DataTable dt = DA.SELECT(sql);
DA.Disconnect();


M = Convert.ToBoolean(dt.Rows[0]["Mnu"].ToString());
S = Convert.ToBoolean(dt.Rows[0]["Str"].ToString());
B1 = Convert.ToBoolean(dt.Rows[0]["Btn1"].ToString());
B2 = Convert.ToBoolean(dt.Rows[0]["Btn2"].ToString());
}

دستورات مرتبط با لاگین :


public bool Login(string Name, string Pass) {
DA.Connect();
string sql = "Select Count(*) From [User] Where Nam = '{0}' And Pas = '{1}'";
sql = string.Format(sql,Name,Pass);
DataTable dt = new DataTable();
dt = DA.SELECT(sql);
DA.Disconnect();


bool Enter = false;
if (dt.Rows[0][0].ToString() == "1")
{
Enter = true;
}
return Enter;
}

نکته : در واقع در دستورات بالا بیان میکنیم که اگر هر متغر برابر مقدار یک (true) باشد - کلید مربوطه فعال باشد و در غیر اینصورت غیرفعال .

دستورات اضافه کردن کاربر جدید :


public void ADD() {
DA.Connect();
string sql = "Insert Into [User] (ID,Nam,Pas,Mnu,Str,Btn1,Btn2)";
sql += "Values ({0},'{1}','{2}','{3}','{4}','{5}','{6}')";
sql = string.Format(sql, this.ID, this.Nam, this.Pas, this.Mnu, this.Str, this.Btn1, this.Btn2);
DA.Execute(sql);
DA.Disconnect();
}

و در آخر متد نمایش مشخصات کاربران در دیتاگرید ویو :


public DataTable ShowData() {
DA.Connect();
DataTable dt = DA.SELECT("Select * From [User]");
DA.Disconnect();
return dt;
}

یادتون نره :


using System.Data.SqlClient;

ghasem110deh
پنج شنبه 27 شهریور 1393, 20:36 عصر
حال وارد کد نویسی در محیط فرم ها میشویم (در واقع لایه سوم - فراخوانی دستورات در دو لایه قبل)
.
.
.
دستورات مربوط به کلید ورود (log in) :


Users us = new Users(); if (us.Login(textBox2.Text, textBox1.Text) == true)
{
us.Sath(textBox2.Text);


this.Hide();
Form2 f2 = new Form2();
f2.Show();
}
else
MessageBox.Show("نام کاربری یا کلمه عبور صحیح نیست");

طبیعتا دستور لغو :


Application.Exit();

نکته : توجه داشته باشید که در دستورات کلید ورود ... متد سطح دسترسی فراخوانی شده است ، و شرط بررسی سطح به تکست باکس دو (نام کاربری) ارجاع شده !

ghasem110deh
پنج شنبه 27 شهریور 1393, 20:50 عصر
در ادامه به مشخص و اعمال سطح دسترسی های تعریف شده در فرم اصلی میپردازیم ؛
.
.
.
دستورات مربوط به تعیین سطح دسترسی در رویداد لود فرم :


private void Form2_Load(object sender, EventArgs e) {
menuStrip1.Enabled = Users.M;
toolStrip1.Enabled = Users.S;
button1.Enabled = Users.B1;
button2.Enabled = Users.B2;
}

نکته : در تکه کد بالا ، منو ، جعبه ابزار و دو کلید مورد نظر فعال یا غیر فعال بودنشان از طریق متغیر های تعریف شده (که حالت پیش فرضشان false بود) تعیین می گردد !
بدین ترتیب که با مراجعه به فیلد مورد نظر در جدول و مشخص شدن مقدار (true و یا false) ، کنترل فعال یا غیر فعال میشود .

طبیعتا نمایش فرم سوم :


Form3 f3 = new Form3();
f3.ShowDialog();

ghasem110deh
پنج شنبه 27 شهریور 1393, 21:08 عصر
در فرم ایجاد کاربر جدید و تعیین سطح دسترسی ، برای تعیین سطح از چهار comboBox با مقادیر true و false استفاده میکنیم ؛
که مقادیر مورد نظر را در فیلد مربوط به کنترل های فرم اصلی از طریق دستورات ذیل در جدول ذخیره میشوند !
.
.
.
در رویداد لود فرم ، کلاس Users فراخوانی شده و دیتاتیبل جهت نمایش رکوردهای جدول در دیتا گرید ویو :


private void Form3_Load(object sender, EventArgs e) {
Users uss = new Users();
DataTable dt = uss.ShowData();
dataGridView1.DataSource = dt;
}

دستورات کلید ثبت کاربر جدید :


private void button2_Click(object sender, EventArgs e) {
Users us = new Users();
us.ID = Convert.ToInt32(textBox1.Text);
us.Nam = textBox2.Text;
us.Pas = textBox3.Text;
us.Mnu = Convert.ToBoolean(comboBox1.Text);
us.Str = Convert.ToBoolean(comboBox2.Text);
us.Btn1 = Convert.ToBoolean(comboBox3.Text);
us.Btn2 = Convert.ToBoolean(comboBox4.Text);
us.ADD();
Form3_Load(null,null);
MessageBox.Show("کاربر جدید ثبت شد");
}

نکته : توجه داشته باشید که ، مقادیر کمبوباکس ها به bool تبدیل شده و در فیلد های مربوط ذخیره شده اند ...
سپس متد ADD - که دستورات insert را در خود دارد فراخوانی شده !
و از :


Form3_Load(null,null);

جهت نمایش در دیتاگرید ویو استفاده شده !
نکته : در محیط دستوری فرم ها به هیچ گونه فراخوانی فضای نام (using) نیاز نیست ! تنها کلاس های ایجاد شده را در صورت نیاز فراخوانی کرده ایم .
همانطور که در تصویر ضمیمه مشاهده می نمایید ، فیلدی که دارای (تیک) می باشد ، کنترل مرتبط به خود را در هنگام ورود کاربر فعال میکند .

ghasem110deh
پنج شنبه 27 شهریور 1393, 21:12 عصر
نکته : جهت ورود اولیه (مدیر) می بایست ، یک رکورد از جدول را بصورت دستی مقداردهی کرده و سپس وارد برنامه شوید !
(مقادیر نوع bit را true قرار دهید) ...
.
.
.
در ادامه نحوه حذف ، ویرایش سطح دسترسی و نحوه ویرایش یوزر و پس توسط خود کاربر ارائه می شود .
.
.
.
تا بعد ... یا علی علیه السلام

fakhravari
جمعه 28 شهریور 1393, 13:10 عصر
برای سطح دسترسی راه بهتری است

مثلا ما صفحه ای داریم برای Student
4 عمل اصلی از نظر ما سطح هاشون مختلف
خب یک جدول امنیت درست میکنیم و به این صورت چک میکنیم
کاربر علی سطح1 برای جدول Student
کاربر علی سطح2 برای جدول Student

بعد میتوان در پیج لود صفحه سطح چک کرد

-----------------

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

alifarah
جمعه 28 شهریور 1393, 15:26 عصر
با سلام و خسته نباشید
آقا مطلبتون عالیه
فقط خواهشا همینارو با اکسس هم یاد بدین
خیلیا اس کیو ال بلد نیسن مثل من .
ممنون میشم

mehrgan131
دوشنبه 14 مهر 1393, 14:48 عصر
سلام و با عرض تشکر. امکان داره فایلش رو هم ادد کنید

ghasem110deh
دوشنبه 14 مهر 1393, 19:10 عصر
اولا کلا بیخیال اکسس شین (نظر منه و دو عزیز که ازشون یاد میگیرم)
دوما واسه اکسس هم تقریبا همینه و فقط از دستورات خودش (oleDb) استفاده کنید ...
---------------------
*** sql - و برای بانک های کوچیک sqlite ***

سورس برنامه ضمیمه شد !