20-09-12, 03:39 AM
lo2i
السلام عليكم ورحمة الله وبركاته
سنقوم بإنشاء برنامج صغير يعتمد على أسلوب الصلاحيات وتعدد المستخدميين
سننشأ قاعدة بيانات أكسيس صغيرة مكونة من جدول واحد فقط ..
وسيكون أسمه (Users) سيحمل هذا الجدول بيانات المستخدميين وصلاحياتهم .
ولتوضيح اسماء الحقول وأنواعها موجودة في هذه الصورة
بعد ان تقوم بحفظ الجدول ونقل القاعدة إلى المكان المعهود !!
نقوم بفتح برنامج الـ VISUAL BASIC.NET ونقوم بإضافة الشاشات التالية ..
[SIZE=3]
1- شاشة تسجيل دخول للبرنامج .
2- الشاشة الرئيسية للبرنامج .
3- شاشة إضافة مستخدم جديد للبرنامج .
ونقوم أيضاُ بإنشاء Moudle لوضع المتغيرات العامة به .
لنبدأ مع الموديول (Moudle) ونقوم بإضافة فضاء الأسماء التالي له
ونقوم بكتابة الأكواد التالية بداخله
ليصبح شكل الـ Moudle كهذه الصورة ...
نذهب للشاشة الأولى (شاشة تسجيل الدخول للبرنامج)
نقوم بإعادة ترتيب الشاشة وفق الشكل التالي :
ونقوم بتعريف فضاء الأسماء التالي بها
وفي القسم العام للكود نقوم بتعريف المتغير Ds على أنه حاوية بيانات (DataSet) بهذا الكود
بداية وأول خطوة نريد فحصها هي خلو الجدول من أي مستخدم سابق في البرنامج ولهذا قررت ان اكتب الاكواد في دالة معينة تعيد قيمة true إذا كان الجدول فارغ وتعيد False إذا كان الجدول به على الأقل مستخدم واحد فقط .
في حدث الفورم لود للشاشة الأولى نقوم بإستدعاء الدالة بهذا الشكل
الكود السابق سوف يقوم بفحص القيمة العائدة من الدالة إذا كانت true فسوف يخرج رسالة للمستخدم (بعدم وجود مستخدم في البرنامج) وسوف يقوم بفتح شاشة إضافة المستخدم الجديد وإذا كان العكس فسيكمل بشكل عادي .
الان ننتقل إلى الكود الذي سوف نكتبه في زر تسجيل الدخول لكي يفحص الجدول ويتحقق من وجود هذا المستخدم ..
كما هو ملاحظ في الكود السطر (check_premission())
بالحقيقة هو إجراء بسيط قمت بكتابته لكي أعطي قيمة لكل متغير (صلاحية)
وهذا هو الإجراء كاملاً
----------------------------------------
-------------------------------------
نقوم بالذهاب إلى الشاشة الرئيسية (Mdiparent)
وكما هو ملاحظ انه يوجد في الأعلى شريط بإسم الـ Tool strip لإضافته تتبع الصورة التالية :
وفي حدث الفورم لود نقوم بكتابة الكود التالي
----------------------------------------------
------------------------------------------------
الكود السابق سوف يقوم بإعادة ضبط خاصية الـ Enable لكل عنصر من عناصر القائمة ToolStrip
بعد انتهائنا من العمل على الشاشة الرئيسية نذهب لشاشة إضافة مستخدم جديد وهي الفورم (Form2)
شكل الشاشة والاداوات الواجب توافرها بها ..
في زر الحفظ نقوم بكتابة الشفرة التالية ...
الكود اعلاه سوف يقوم بإضافة بيانات المستخدم مع صلاحياته الموكّل بها .
تذكر بدايةً ان تضيف فضاء الأسماء في بداية صفحة الكود . !!
ونقوم بالنقر نقراً مزدةجاً على الخيار (admin) من قائمة الصلاحيات ونقوم بإدخال الكود التالي في حدث الـ CheckBox1_CheckedChanged للـ CheckBox1
كما هو معروف بديهياً ان الـ Admin يكون المسؤول وبما أنه مسؤول فهو مدير وبما أنه مدير فهو يملك جميع الصلاحيات
ومن هذا المنطلق يعمل الكود السابق .. (فإذا قمت باختيار الخيار الأول (Admin) سوف يكمل عنك اختيار باقي الاختيارات والعكس صحيح ) نوع من التسهيل لا أكثر ولا أقل ..
على العموم بعد أن قمنا من الانتهاء من بناء المثال البسيط
جداً سوف نقوم بإدخال مستخدم جديد
وسوف أعطي له جميع الصلاحيات ماعد
التعديل على السجلات
البحث عن سجلات
سوف تلاحظ في الصورة التالية كيف سيظهر للمستخدم شكل البرنامج
الحمد لله رب العالميين إلى هنا نكون قد انهينا درسنا
هذه كانت فكرة بسيطة فقط عن كيفية إضافة الصلاحيات للمستخدميين , يمكنك تطويرها حسب إحتياجاتك لها ..
كأن تضيف للبرنامج صلاحيات أخرى كالطباعة مثلاً
او كالسماح له برؤية المستخدميين وبياناتهم ..
--------------
لكم مني كل الاحترام
[COLOR=Red]
لاتنسوني من دعائكم رجاء
المثال في المرفقات ..
[/SIZE]
كثيراً مانحتاج إلى التمييز بين مستخدمي البرنامج ولطالما حلمنا بإضافة خاصية ونكهة الصلاحيات إلى برامجنا ومشاريعنا وخاصة إذا كانت المشاريع ذات طابع عام ويدخلها كل من هب ودب من الناس والمستخدمين ,, لذا فالحاجة أم الاختراع
دعنا نبدأ بداية بالتعريف قليلاً عن فكرة الصلاحيات وعن عملها كتقنية ومن ثم كبرمجة ...
[SIZE=4]كتقنية : لنأخذ مثالاً برنامج لدى شركة استيراد وتصدير ,,[/SIZE]
سيكون فيها شخص وهو الـ Admin ولديه كافة الصلاحيات التي تخوله للدخول إلى أية جزئية في البرنامج والتعديل على اي عملية شراء او بيع او استيراد او تصدير (يمتلك جميع الصلاحيات لذلك)
المدراء لنفرض أنه يوجد مديرين فرعيين
الأول : للاستيراد يمكنك فقط متابعة عمليات الإستيراد من حالة البضاعة وسعرها ومكانها وما إلى ذلك.
والثاني للتصدير يهتم فقط بالعمليات الموكلة إليه من تصدير وتأمين وبيع في الخارج
وكلاهما محجوز (مقيّد) ضمن صلاحيات لايحّود عنها ولا يستطيع كسرها وهنا تُستبان لنا قوة البرنامج.
[SIZE=4]كبرمجة : يوجد أكثر من طريقة محددة لبرمجة هذه الخاصية او التقنية (كما أسميها)[/SIZE]
بداية جميعنا نعرف محرك قواعد بيانات SQL SERVER
وأنه يحتوي على كثير من الخصائص التي لاتحويها اي قواعد بيانات أخرى فعلي سبيل المثال
الخاصية Invoke , Grant هي التي تحدد صلاحيات الوصول إلى السيرفر وتعطي صلاحيات لجميع المستخدميين بالامور التي يستطيع عملها .. الخلاصة ..
ان البرامج الكبيرة لا تخلو من استعمال أسلوب الصلاحيات ..
دعنا نبدأ بداية بالتعريف قليلاً عن فكرة الصلاحيات وعن عملها كتقنية ومن ثم كبرمجة ...
[SIZE=4]كتقنية : لنأخذ مثالاً برنامج لدى شركة استيراد وتصدير ,,[/SIZE]
سيكون فيها شخص وهو الـ Admin ولديه كافة الصلاحيات التي تخوله للدخول إلى أية جزئية في البرنامج والتعديل على اي عملية شراء او بيع او استيراد او تصدير (يمتلك جميع الصلاحيات لذلك)
المدراء لنفرض أنه يوجد مديرين فرعيين
الأول : للاستيراد يمكنك فقط متابعة عمليات الإستيراد من حالة البضاعة وسعرها ومكانها وما إلى ذلك.
والثاني للتصدير يهتم فقط بالعمليات الموكلة إليه من تصدير وتأمين وبيع في الخارج
وكلاهما محجوز (مقيّد) ضمن صلاحيات لايحّود عنها ولا يستطيع كسرها وهنا تُستبان لنا قوة البرنامج.
[SIZE=4]كبرمجة : يوجد أكثر من طريقة محددة لبرمجة هذه الخاصية او التقنية (كما أسميها)[/SIZE]
بداية جميعنا نعرف محرك قواعد بيانات SQL SERVER
وأنه يحتوي على كثير من الخصائص التي لاتحويها اي قواعد بيانات أخرى فعلي سبيل المثال
الخاصية Invoke , Grant هي التي تحدد صلاحيات الوصول إلى السيرفر وتعطي صلاحيات لجميع المستخدميين بالامور التي يستطيع عملها .. الخلاصة ..
ان البرامج الكبيرة لا تخلو من استعمال أسلوب الصلاحيات ..
سنقوم بإنشاء برنامج صغير يعتمد على أسلوب الصلاحيات وتعدد المستخدميين
سننشأ قاعدة بيانات أكسيس صغيرة مكونة من جدول واحد فقط ..
وسيكون أسمه (Users) سيحمل هذا الجدول بيانات المستخدميين وصلاحياتهم .
ولتوضيح اسماء الحقول وأنواعها موجودة في هذه الصورة
بعد ان تقوم بحفظ الجدول ونقل القاعدة إلى المكان المعهود !!
نقوم بفتح برنامج الـ VISUAL BASIC.NET ونقوم بإضافة الشاشات التالية ..
[SIZE=3]
1- شاشة تسجيل دخول للبرنامج .
2- الشاشة الرئيسية للبرنامج .
3- شاشة إضافة مستخدم جديد للبرنامج .
ونقوم أيضاُ بإنشاء Moudle لوضع المتغيرات العامة به .
لنبدأ مع الموديول (Moudle) ونقوم بإضافة فضاء الأسماء التالي له
PHP كود :
imports system.data.oledb
PHP كود :
Dim str As String = "provider=microsoft.jet.oledb.4.0; data source = " & _
Application.StartupPath & "\data.mdb"
Public con As New OleDbConnection(str)
Public allow_insert As Boolean = False
Public allow_edit As Boolean = False
Public allow_delete As Boolean = False
Public allow_select As Boolean = False
Public allow_add_users As Boolean = False
نذهب للشاشة الأولى (شاشة تسجيل الدخول للبرنامج)
نقوم بإعادة ترتيب الشاشة وفق الشكل التالي :
ونقوم بتعريف فضاء الأسماء التالي بها
PHP كود :
Imports System.Data.OleDb
PHP كود :
Public ds As New DataSet
PHP كود :
Function users_count()
Dim cmd As New OleDbCommand("select count(*) from users", con)
If con.State = ConnectionState.Open Then
con.Close()
End If
Dim count As Integer = 0
con.Open()
count = cmd.ExecuteScalar()
con.Close()
If count = 0 Then
Return True
Else
Return False
End If
End Function
PHP كود :
If users_count() = True Then
MsgBox("لايوجد هناك مستخدميين في البرنامج سيتم إضافتك كمستخدم رئيسي", MsgBoxStyle.Information)
Me.Dispose()
Form2.Show()
Exit Sub
End If
الان ننتقل إلى الكود الذي سوف نكتبه في زر تسجيل الدخول لكي يفحص الجدول ويتحقق من وجود هذا المستخدم ..
PHP كود :
ds.Clear()
Dim data As New OleDbDataAdapter("select allow_insert,allow_edit,allow_delete,allow_select,allow_add_users from users where username='" & Trim(TextBox1.Text) & "' and userpass = '" & Trim(TextBox2.Text) & "'", con)
con.Open()
data.Fill(ds, "users")
con.Close()
If ds.Tables("users").Rows.Count = 0 Then
MsgBox("خطأ في إسم المستخدم او كلمة المرور")
Else
check_premission()
Me.Dispose()
MDIParent1.Show()
End If
بالحقيقة هو إجراء بسيط قمت بكتابته لكي أعطي قيمة لكل متغير (صلاحية)
وهذا هو الإجراء كاملاً
----------------------------------------
PHP كود :
Sub check_premission()
allow_insert = ds.Tables("users").Rows(0)(0)
allow_edit = ds.Tables("users").Rows(0)(1)
allow_delete = ds.Tables("users").Rows(0)(2)
allow_select = ds.Tables("users").Rows(0)(3)
allow_add_users = ds.Tables("users").Rows(0)(4)
End Sub
نقوم بالذهاب إلى الشاشة الرئيسية (Mdiparent)
وكما هو ملاحظ انه يوجد في الأعلى شريط بإسم الـ Tool strip لإضافته تتبع الصورة التالية :
وفي حدث الفورم لود نقوم بكتابة الكود التالي
----------------------------------------------
PHP كود :
insertToolStripButton.Enabled = allow_insert
editToolStripButton.Enabled = allow_edit
deleteToolStripButton.Enabled = allow_delete
selectPreviewToolStripButton.Enabled = allow_select
addToolStripButton.Enabled = allow_add_users
الكود السابق سوف يقوم بإعادة ضبط خاصية الـ Enable لكل عنصر من عناصر القائمة ToolStrip
بعد انتهائنا من العمل على الشاشة الرئيسية نذهب لشاشة إضافة مستخدم جديد وهي الفورم (Form2)
شكل الشاشة والاداوات الواجب توافرها بها ..
في زر الحفظ نقوم بكتابة الشفرة التالية ...
PHP كود :
If TextBox1.Text = "" Then
MsgBox("اكتب اسم للمستخدم")
Exit Sub
End If
If TextBox2.Text <> TextBox3.Text Then
MsgBox("كلمات السر غير متطابقة")
TextBox2.Clear()
TextBox3.Clear()
Exit Sub
End If
Dim cmd As New OleDbCommand("insert into users (username,userpass,allow_insert,allow_edit,allow_delete,allow_select,allow_add_users) values (?,?,?,?,?,?,?)", con)
cmd.Parameters.AddWithValue("@username", OleDbType.VarChar).Value = Trim(TextBox1.Text)
cmd.Parameters.AddWithValue("@userpass", OleDbType.VarChar).Value = Trim(TextBox2.Text)
cmd.Parameters.AddWithValue("@allow_insert", OleDbType.Boolean).Value = CheckBox2.Checked
cmd.Parameters.AddWithValue("@allow_edit", OleDbType.Boolean).Value = CheckBox3.Checked
cmd.Parameters.AddWithValue("@allow_delete", OleDbType.Boolean).Value = CheckBox4.Checked
cmd.Parameters.AddWithValue("@allow_select", OleDbType.Boolean).Value = CheckBox5.Checked
cmd.Parameters.AddWithValue("@allow_add_users", OleDbType.Boolean).Value = CheckBox6.Checked
con.Open()
cmd.ExecuteNonQuery()
con.Close()
MsgBox("تم حفظ المستخدم الجديد بنجاح", MsgBoxStyle.Information)
تذكر بدايةً ان تضيف فضاء الأسماء في بداية صفحة الكود . !!
PHP كود :
Imports System.Data.OleDb
PHP كود :
If CheckBox1.Checked = True Then
For Each cntr In Me.Controls
If TypeOf cntr Is CheckBox Then
cntr.checked = True
End If
Next
Else
For Each cntr In Me.Controls
If TypeOf cntr Is CheckBox Then
cntr.checked = False
End If
Next
End If
ومن هذا المنطلق يعمل الكود السابق .. (فإذا قمت باختيار الخيار الأول (Admin) سوف يكمل عنك اختيار باقي الاختيارات والعكس صحيح ) نوع من التسهيل لا أكثر ولا أقل ..
على العموم بعد أن قمنا من الانتهاء من بناء المثال البسيط
جداً سوف نقوم بإدخال مستخدم جديد
وسوف أعطي له جميع الصلاحيات ماعد
التعديل على السجلات
البحث عن سجلات
سوف تلاحظ في الصورة التالية كيف سيظهر للمستخدم شكل البرنامج
الحمد لله رب العالميين إلى هنا نكون قد انهينا درسنا
هذه كانت فكرة بسيطة فقط عن كيفية إضافة الصلاحيات للمستخدميين , يمكنك تطويرها حسب إحتياجاتك لها ..
كأن تضيف للبرنامج صلاحيات أخرى كالطباعة مثلاً
او كالسماح له برؤية المستخدميين وبياناتهم ..
--------------
لكم مني كل الاحترام
[COLOR=Red]
لاتنسوني من دعائكم رجاء
المثال في المرفقات ..
[/SIZE]