تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
درس بالصور :: أَضّف لبرنامجك خاصية الصلاحيات والآذونات للمستخدميين ::
#1
lo2i

السلام عليكم ورحمة الله وبركاته

كثيراً مانحتاج إلى التمييز بين مستخدمي البرنامج ولطالما حلمنا بإضافة خاصية ونكهة الصلاحيات إلى برامجنا ومشاريعنا وخاصة إذا كانت المشاريع ذات طابع عام ويدخلها كل من هب ودب من الناس والمستخدمين ,, لذا فالحاجة أم الاختراع Smile
دعنا نبدأ بداية بالتعريف قليلاً عن فكرة الصلاحيات وعن عملها كتقنية ومن ثم كبرمجة ...
[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 
ليصبح شكل الـ Moudle كهذه الصورة ...





نذهب للشاشة الأولى (شاشة تسجيل الدخول للبرنامج)
نقوم بإعادة ترتيب الشاشة وفق الشكل التالي :






ونقوم بتعريف فضاء الأسماء التالي بها

PHP كود :
Imports System.Data.OleDb 
وفي القسم العام للكود نقوم بتعريف المتغير Ds على أنه حاوية بيانات (DataSet) بهذا الكود

PHP كود :
Public ds As New DataSet 
بداية وأول خطوة نريد فحصها هي خلو الجدول من أي مستخدم سابق في البرنامج ولهذا قررت ان اكتب الاكواد في دالة معينة تعيد قيمة true إذا كان الجدول فارغ وتعيد False إذا كان الجدول به على الأقل مستخدم واحد فقط .

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 
الكود السابق سوف يقوم بفحص القيمة العائدة من الدالة إذا كانت true فسوف يخرج رسالة للمستخدم (بعدم وجود مستخدم في البرنامج) وسوف يقوم بفتح شاشة إضافة المستخدم الجديد وإذا كان العكس فسيكمل بشكل عادي .

الان ننتقل إلى الكود الذي سوف نكتبه في زر تسجيل الدخول لكي يفحص الجدول ويتحقق من وجود هذا المستخدم ..

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 
كما هو ملاحظ في الكود السطر (check_premission())
بالحقيقة هو إجراء بسيط قمت بكتابته لكي أعطي قيمة لكل متغير (صلاحية)

وهذا هو الإجراء كاملاً
----------------------------------------
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 
ونقوم بالنقر نقراً مزدةجاً على الخيار (admin) من قائمة الصلاحيات ونقوم بإدخال الكود التالي في حدث الـ CheckBox1_CheckedChanged للـ CheckBox1


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 يكون المسؤول وبما أنه مسؤول فهو مدير وبما أنه مدير فهو يملك جميع الصلاحيات Big Grin
ومن هذا المنطلق يعمل الكود السابق .. (فإذا قمت باختيار الخيار الأول (Admin) سوف يكمل عنك اختيار باقي الاختيارات والعكس صحيح ) نوع من التسهيل لا أكثر ولا أقل .. Smile

على العموم بعد أن قمنا من الانتهاء من بناء المثال البسيط
جداً سوف نقوم بإدخال مستخدم جديد
وسوف أعطي له جميع الصلاحيات ماعد
التعديل على السجلات
البحث عن سجلات

سوف تلاحظ في الصورة التالية كيف سيظهر للمستخدم شكل البرنامج





الحمد لله رب العالميين إلى هنا نكون قد انهينا درسنا
هذه كانت فكرة بسيطة فقط عن كيفية إضافة الصلاحيات للمستخدميين , يمكنك تطويرها حسب إحتياجاتك لها ..
كأن تضيف للبرنامج صلاحيات أخرى كالطباعة مثلاً
او كالسماح له برؤية المستخدميين وبياناتهم ..
--------------
لكم مني كل الاحترام
[COLOR=Red]
لاتنسوني من دعائكم رجاء

المثال في المرفقات ..
[/SIZE]
الرد }}}}
تم الشكر بواسطة:
#2
البرنامج في المرفقات ..


الملفات المرفقة
.rar   windows-1256''premissions.rar (الحجم : 153.75 ك ب / التحميلات : 545)
الرد }}}}
تم الشكر بواسطة:
#3
شكر لك اخي على الموضوع القيم

لكن حبذا لو ترجع على الصور لان بعضها مو طالع
الرد }}}}
تم الشكر بواسطة:
#4
لك جزيل الشكرشرح كثر من رائع
الرد }}}}
تم الشكر بواسطة:
#5
الشكر كل الشكر لكاتب الموضوع و فعلا أهم جزئية لكل برنامج تجاري او خدمي هي الصلاحيات و انصح كل من يريد البدء بصنع البرامج ان يبدأ من هنا
وفقك الله و سدد خطاك و كلمة شكر قليلة على مجهودك لرائع.

ملاحظة : بعض الصور لا تظهر و لكن الشرح يغني.
الرد }}}}
تم الشكر بواسطة:
#6
موضوع هائل جدا وجزاك الله كل خير
الرد }}}}
تم الشكر بواسطة:
#7
Good . . . . . . .
الرد }}}}
تم الشكر بواسطة:
#8
جزاكـ الله كل الخير
وباركـ الله فيكـ
وربي يحفظكـ
تستحق التقيم
الرد }}}}
تم الشكر بواسطة:
#9
مشكورررررررررررررررررررررررررر
الرد }}}}
تم الشكر بواسطة:
#10
ارجوا تحديث الصور اخي الكريم وتحديث رابط المرفق
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية تحزيم برنامج وتضمين معه قاعدة البيانات شرح بالصور مبرمج بلا حدود 30 14,646 20-07-16, 06:58 PM
آخر رد: ahmedfa71

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم