recent
مواضيع ساخنة

طريقة انشاء نظام مجموعات وصلاحيات كامل على الاكسس

 يعتبر برنامج الاكسس Microsoft Access من البرامج المميزة في اداة قواعد البيانات, بالطبع لا يوفر البرنامج الكثير من الميزات والخصائص التي توفرها برامج ادارة قواعد البيانات الاخرى مثل  SQL Server ولكن يعتبر برنامج مناسب جداً للمنشئات الصغيرة جداً ويفضله الكثير من المستخدمين لسهولة استخدماه وتثبيته على الاجهزة الخاصة بالمؤسسات. 

يواجه الكثير من مبرمجي اكسس صعوبة كبيرة في انشاء نظام مجموعات وصلاحيات قوي يمسح لمدير البرنامج بتحديد صلاحيات المستخدمين بشكل دقيق وذلك بهدف حماية البيانات وعدم السماح لغير المخولين بالاطلاع عليها وتعديلها.

لذك نقدم لكم شرح تفصيلي لطريقة انشاء نظام صلاحيات مميز يمكنك تطبيقة على كافة قواعد البيانات التي تعمل عليه.

يعتبر هذا الدرس هو درس متقدم في الاكسس ولن يتم شرح اساسيات الاكسس خلال هذا الدرس تفادياً لاضاعة الوقت والخوض في تفاصيل بعيدة عن موضوع الدرس.

مع ذلك سيتم شرح طريقة انشاء النظام بشكل تفصيلي ولكي تستطيع تطبيق الدرس بشكل سليم يجب ان يكون لديك خبرة في اساسيات الاسس بالاضافة الى خبرة مقبولة في البرمجة بلغة VBA. 

وسأترك لكم في نهاية الشرح رابط لتحميل قاعدة البيانات التي تم الشرح عليها لتتمكنو من الاطلاع عليها واستخدام الاكواد الخاصة بنظام الصلاحيات. بالاضافة الى العديد من الشاشات والاكواد المنشأة في قاعدة البيانات هذه يمكنكم الاستفادة منها في العديد من الامور.



اولاً: انشاء الجداول اللازمة لنظام الصلاحيات والمجموعات 

سنحتاح لانشاء 4 جداول خاصة للنظام. بخصوص اسماء الجداول والحقول يمكنك ان تختارها بما يناسبك ولا يشترط ان تكون كما هي في الشرح لكن انصحك بشدة استخدام نفس المسميات وذلك لا يحدث لديك مشاكل لاحقا في نرحلة البرمجة:

1- جدول المستخدمين (tblUsers):


User_Name: هو اسم المستخدم ويجب ان يكون فريد لكل حقل (Primary Key)
UserFullName: اسم المستخدم الكامل.
User_PASS: كلمة المرور الخاصة بالمستخدم.
PASS_Date: تاريخ نهاية صلاحية كلمة المستخدم.
PASS_COUNT: عدد محاولات الدخول الفاشلة للمستخدم.
IS_New: هل كلمة المرور جديد ويجب تغييرها من طرف المستخدم.
Roll_ID: رقم المجموعة التي ينتمي اليها المستخدم.
New_User: هل المستخدم جديد وغيل فعال.


2- جدول المجموعات (tblRolls):

Roll_ID: رقم المجموعة (Primary Key)
Roll_Name: اسم المجموعة


3- جدول الشاشات (tblForms):


Form_Name: اسم الشاشة البرمجي (الفورم) (Primary Key)
Form_ArName: اسم الشاشة باللغة العربية.


4- جدول صلاحيات الدخول (tblRollsAccess):

Roll_ID: رقم المجموعة (Primary Key)
Form_Name: اسم الشاشة البرمجي (الفورم) (Primary Key)
HasAccess: هل يوجد صلاحية لمستخدمي المجموعة بالدخول الى الشاشة ام لا.


ثانياً: برمجة شاشات اضافة وادارة المستخدمين

1- شاشة اضافة مستخدم جديد (FRM_NewUser): 

 يتم تصميم شاشة كما في الصورة التالية وسأقوم بعرض الاكواد المستخدمة في برمجة الشاشة لكن لن اقوم بشرحها بكشل مفصل حيث ان هذه الكواد يفترض انها بسيطة ولديكم معلومات كافية عن طريقة كتابتها


الاسم البرمجي لتكستبوكس USERNAME هو (txtID).
الاسم البرمجي لتكستبوكس EMPLOYEE NAME هو (txtname).

وكما تم ذكره سابقا في انشاء الجداول يمكنك استخدام الاسماء البرمجية التي تفضلها وليس بالضرورة الالتزام بما يرد في الشرح, لكن انصح باستخدام هذه الاكواد لتسهيل عملية البرمجة لديك ولتفادي حدوث اية اخطاء 

كود زر البحث الذي بجانب تيكست بوكس USERNAME : يسمح لك هذا الكود بالتحقق من وجود اسم المستخدم قبل اضافته في قاعدة البيانات.

If Me.txtID.Value <> "" Then
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblUsers WHERE User_Name = '" & Me.txtID.Value & "'")
If rst.RecordCount = 0 Then
MsgBox "NO DATA", vbCritical, "Ok"
Else
ARname = rst!UserFullName
Me.txtname.Value = ARname
Me.btnsearch.Enabled = True
Me.btnsavenew.Enabled = False
End If
Else
MsgBox "Please Enter USERNAME First", vbCritical, "Error"
End If


كود زر ADD NEW: يقوم هذا الزر بتفريغ البيانات لاضافة مستخدم جديد 
Me.txtID.Value = ""
Me.txtname.Value = ""
Me.btnsearch.Enabled = True
Me.btnsavenew.Enabled = True

كود زر SAVE : هذا الزر مخصص لحفظ بيانات المستخدم في قاعدة البيانات 
Dim StrSQL As String
If Me.txtID.Value <> "" And Me.txtname.Value <> "" Then
StrSQL = "INSERT INTO tblUsers (User_Name,UserFullName,New_User) VALUES ('" & Me.txtID.Value & "','" & Me.txtname.Value & "',True );"
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
MsgBox "User Addedd Successfully", vbInformation, "MSG"
Else
MsgBox "Please Fill all Data First", vbCritical, "error"
End If
اما بخصوص رز USERS LIST فهو لعرض تقرير بقائمة المستخدمين المسجلين في قاعدة البيانات ويمكنك انشاء التقرير حسب رغباتك 

2- شاشة تعديل بيانات المستخدمين (FRM_EditUsers): 



من خلال هذه الشاشة يمكنك تعديل بيانات المستخدمين وتصنيفهم ضمن مجموعات وتحديد صلاحيات المجموعات لاحقاً

الادوات المتوفرة في هذه الشاشة (هنا لا اتحدث عن Labels انها الادوات الموجود بجنبها)

تيكستبوكس USERNAME :اسمه البرمجي (txtID): يتم ادخال اسم المستخم هنا.

زر البث الذي بجانب اسم المستخدم: يتم الضغط عليه بعد ادخال اسم المستخدم وذلك لجلب بيانات المستخدم وعرضها في الفورم.
الكود البرمجي للزر: 
If Me.txtID.Value <> "" Then
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblUsers WHERE User_Name = '" & Me.txtID.Value & "'")
If rst.RecordCount = 0 Then
MsgBox "NO DATA", vbCritical, "error"
Me.txtID.SetFocus

Else
ARname = rst!UserFullName
pass = rst!User_PASS
PassCount = rst!PASS_COUNT
Roll_ID = rst!Roll_ID
Me.txtname.Value = ARname
Me.txtpass.Value = pass
Me.txtpasscount.Value = PassCount
Me.cbxRollId.Value = Roll_ID
Me.btnsearch.Enabled = True
Me.txtpass.Enabled = False
Me.txtID.Enabled = False
Me.btnsave.Enabled = True


End If
Else
MsgBox "Please Select USERNAME First", vbCritical, "error"
Me.txtID.SetFocus
End If

تيكستبوكس EMPLOYEE NAME: اسمه البرمجي (txtname): يعرض الاسم الكامل للمستخدم.

تيكستبوكس PASSWORD: اسمه البرمجي (txtpass): هنا كلمة المرور للمستخدم ويجب ان يكون Input Mask لها من نوع Password.

زر المفتاح الذي بجانب PASSWORD: عند جلب بيانات المستخدم يقوم البرنامج تلقائيا بالغاء تفعيل تيكستبوكس كلمة المرور لمنع تعديلها دون علم المستخدم ومهمة هذا الزر السماح للمدير بتعديل كلمة المرور وفي نفس الوقت سيخزن في قاعدة البيانات ان كلمة المرور لهذا المستخدم تم تعديلها وسيطلب من المستخدم تغييرها من طرفه فور دخوله للبرنامج.
الكود الرمجي للزر: 

Me.txtpass.Enabled = True
Me.txtpass.Value = ""
Me.txtpass.SetFocus
تيكستبوكس LOGIN ATTEMPTS: كوده البرمجي (txtpasscount) هو عداد لمحاولة الدخول الفاشلة للمستخدم وذلك لمنع المستخدم من المحاولة مرة اخرى بعد عدد محدد من المحاولات سيتم تحديد هذا العدد لاحقا في شاشاة تسجيل الدخول.

كمبوبوكس ROLL: اسمه البرمجي (cbxRollId): هو قائمة للمجموعات المضافة في قاعدة البيانات في جدول (tblRolls).

زر SAVE CHANGES: لحفظ البيانات التي تم تعديلها. كود الزر: 

Dim db As dao.Database
Set db = CurrentDb
If Me.txtpass.Enabled = True Then
db.Execute "UPDATE tblUsers SET UserFullName= '" & Me.txtname.Value & "', User_PASS= '" & Me.txtpass.Value & "' , PASS_COUNT = " & Me.txtpasscount.Value & " , IS_New = True , Roll_ID = " & Me.cbxRollId.Value & " WHERE User_Name= '" & Me.txtID.Value & "'"
Else
db.Execute "UPDATE tblUsers SET UserFullName= '" & Me.txtname.Value & "', User_PASS= '" & Me.txtpass.Value & "' , PASS_COUNT = " & Me.txtpasscount.Value & ", Roll_ID = " & Me.cbxRollId.Value & " WHERE User_Name= '" & Me.txtID.Value & "'"
End If

MsgBox "Changes Saved Successfully", vbInformation, "MSG"
Me.txtID.Value = ""
Me.txtname.Value = ""
Me.txtpass.Value = ""
Me.txtpasscount.Value = ""
Me.cbxRollId.Value = ""
Me.txtID.Enabled = True
Me.txtID.SetFocus
Me.btnsave.Enabled = False

2- شاشة تفعيل/ايقاف المستخدمين (FRM_USERSACTIVATION): 


بعد انشاء المستخدم لاول مرة تكون حالة المستخدم غير فعال ولا يمكنه تسجيل الدخول الا بعد تفعيله من خلال هذه الشاشة. ويمكن ايقاف او تفعيل اي مستخدم لاحق من خلال هذه الشاشة.

تيكستبوكس USERNAME: اسمه البرمجي (txtID) يتم اضافة اسم المستخدم المراد تفعيله/ايقافه هنا.

زر البحث: يقوم بجلب وعرض حاله المستخدم المدخل. كود الزر: 
If Me.txtID.Value <> "" Then
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblUsers WHERE User_Name = '" & Me.txtID.Value & "'")
If rst.RecordCount = 0 Then
MsgBox "User Not Exist", vbCritical, "Warning"
Else
IS_NEW = rst!New_User

If IS_NEW = True Then
Me.lblStstus.Visible = True
Me.lblStstus.Caption = "Blocked"
Me.btnActive.Enabled = True
Me.btnStop.Enabled = False

Else
Me.lblStstus.Visible = True
Me.lblStstus.Caption = "Active"
Me.btnActive.Enabled = False
Me.btnStop.Enabled = True
ليبيل (Label)USER STATUS: اسمه البرمجي (lblStstus) يستخدم لعرض حالة المستخدم.

زر Activate: لتفعيل المستخدم المختار. كود الزر: 
If Me.lblStstus.Visible = True Then
Dim dbs As dao.Database
Dim qdf As QueryDef
Set dbs = CurrentDb
dbs.Execute "UPDATE tblUsers SET New_User= false  WHERE User_Name= '" & Me.txtID.Value & "'"
MsgBox "Activated Successfully", vbInformation, "MSG"
Me.lblStstus.Caption = "Active"
Me.btnActive.Enabled = False
Me.btnStop.Enabled = True

End If


زر Block: لايقاف المستخدم المختار. كود الزر: 
If Me.lblStstus.Visible = True Then
Dim dbs As dao.Database
Dim qdf As QueryDef
Set dbs = CurrentDb
dbs.Execute "UPDATE tblUsers SET New_User= True  WHERE User_Name= '" & Me.txtID.Value & "'"
MsgBox "Blocked Successfully", vbInformation, "MSG"
Me.lblStstus.Caption = "Blocked"
Me.btnActive.Enabled = True
Me.btnStop.Enabled = False

End If

ثالثاً: برمجة شاشات اضافة وادارة المجموعات

من خلال هذه الشاشة يمكنك اضافة, تعديل, وحذف المجموعات من قاعدة البيانات

تيكستبوكس ROLL ID: اسمه البرمجي (txtID) يتم اضافة رقم المجموعة هنا سواء كانت مجموعة موجودة او رقم جديد لمجموعة سيتم انشاءها.

رز البحث: لجلب باسم المجموعة في حال كان رقم المجموعة موجود ليتم التعديل على اسمها وفي حال كان رقم المجموعة غير موجود سيسمح لك بانشاءها عن طريق اضافة اسمها والضغط على زر SAVE. كود الزر: 
If Me.txtID.Value <> "" Then
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblRolls WHERE Roll_ID = " & Me.txtID.Value & "")
If rst.RecordCount = 0 Then
MsgBox "áÇ íæÌÏ ÈíÇäÇÊ áÑÞã ÇáãÌãæÚÉ ÇáãÏÎá", vbCritical, "ÊäÈíå"
Else
ARname = rst!Roll_Name
Me.txtname.Value = ARname
Me.btnsave.Enabled = True
Me.btndelete.Enabled = True
Me.btnsearch.Enabled = True
Me.btnsavenew.Enabled = False
End If
Else
MsgBox "íÑÌì ÇÏÎÇá ÑÞã ÇáãÌãæÚÉ ÇæáÇ", vbCritical, "ÊäÈíå"
End If

تيكستبوكس ROLL NAME: اسمه البرمجي (txtname) لعرض اسم المجموعة.

زر ADD NEW: لتفريغ البيانات للبحث من جديد.كود الزر:
Me.txtID.Value = ""
Me.txtname.Value = ""
Me.btnsave.Enabled = False
Me.btndelete.Enabled = False
Me.btnsearch.Enabled = True
Me.btnsavenew.Enabled = True

زر SAVE: لحفظ بيانات المجموعة الجديدة.كود الزر:
If Me.txtID.Value <> "" Then
Dim dbs As dao.Database
Dim qdf As QueryDef
Set dbs = CurrentDb
dbs.Execute "UPDATE tblRolls SET Roll_Name= '" & Me.txtname.Value & "'WHERE Roll_ID= " & Me.txtID.Value & ""
MsgBox "Êã ÍÝÙ ÇáÊÚÏíáÇÊ", vbInformation, "ÑÓÇáÉ"
Me.QURROLLS_subform.Requery

End If

زر SAVE CHANGES: لحفظ التعديلات على بيانات المجموعة القائمة.كود الزر:
Dim StrSQL As String
If Me.txtID.Value <> "" And Me.txtname.Value <> "" Then
StrSQL = "INSERT INTO tblRolls VALUES (" & Me.txtID.Value & ",'" & Me.txtname.Value & "' );"
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
MsgBox "Êã ÍÝÙ ÇáãÌãæÚÉ", vbInformation, "ÑÓÇáÉ"
Me.QURROLLS_subform.Requery
Else
MsgBox "íÑÌì ÇßãÇá ÇáÈíÇäÇÊ", vbCritical, "ÊäÈíå"
End If


رابعاً: برمجة شاشات الوظائف ومنح الصلاحيات

1. شاشة الوظائف (اسماء الشاشات المتوفرة في البرنامج) (FRM_Functions)



في هذه الشاشة يتم اضافة اسماء الشاشات التي سيتم منح او منع صلاحيات الدخول اليها لاحقا.

تيكستبوكس FUNCTION CODE: اسمه البرمجي (txtFromName) يتم هنا اضافة اسم الفورم البرمجي كما تم تسميته لديك في البرنامج.

تيسكتبوكس FUNCTION NAME:: اسمه البرمجي (txtArName) يتم هنا كتابة اسم الفورم او الشاشة باللغة العربية او اي اسم ليساعدك على التعرف على الشاشة المقصودة.

زر SAVE: لحفظ البيانات في قاعدة البيانات. كود الزر: 

Dim StrSQL As String
Dim DatDiff As Integer
If Me.txtFromName.Value <> "" And Me.txtArName.Value <> "" Then
StrSQL = "INSERT INTO tblForms VALUES ('" & Me.txtFromName.Value & "','" & Me.txtArName.Value & "');"
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
MsgBox "Successfully Saved", vbInformation, "MSG"
Me.QUR_FUNCTIONS_subform.Requery
Me.txtArName.Value = ""
Me.txtFromName.Value = ""
Me.txtArName.SetFocus

Else
MsgBox "Please Fill all Data First", vbCritical, "Error"
Me.txtArName.SetFocus

End If

وكما تشاهدون في الجزء السفلي من الفورم يوجد قائم باسماء الشاشات المدخلة في قاعدة البيانات وهي مجرد Query قمت بتضمينها في الفورم ليسهل على مشاهدة اسماء الشاشات المدخلة ولحذف الشاشات من خلاها.


2. شاشة منح/ الغاء صلاحيات الدخول على البرنامج (FRM_ROLLSACCESS)


كومبوبكس Select Roll: اسمه البرمجي (cbxroll): يتم تعبئته بكافة المجموعات المدخلة في جدول (tblRolls).

كومبوبكس Select Function: اسمه البرمجي(cbxform) يتم تعبئته بكافة اسماء الشاشات المدخلة في جدول (tblForms).

زر Veiw Roll Currect Functions: لعرض الشاشات الممنوح صلاحيات مشاهدتها للمجموعة المختارة. كود الزر: 
Me.QUR_RollsAccess_subform.Requery

زر Give Access: لمنح صلاحية الدخول للشاشة المختارة للمجموعة المحددة.كود الزر: 
Dim StrSQL As String
If Me.cbxroll.Value <> "" And Me.cbxform.Value <> "" Then
StrSQL = "INSERT INTO tblRollsAccess VALUES (" & Me.cbxroll.Value & ",'" & Me.cbxform.Value & "',True );"
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
MsgBox "Roll have Access Now", vbInformation, "MSG"
Me.QUR_RollsAccess_subform.Requery

Else
MsgBox "Please Fill All Data First", vbCritical, "Error"
End If


خامساً: انشاء شاشة تسجيل الدخول


في الحقيقة كافة الشاشات والجداول التي تم انشاءها سابقا تعد بدون فائدة دون شاشة تسجيل الدخول. من خلال شاشة تسجيل الدخول التي ستم تحديدها على انها الشاشة الرئيسية التي ستظهر فور قاعدة البيانات ستقوم هذه الشاشة بتحديد المجموعة التي ينتمي اليها هذا المستخدم وبالتالي سيتم تحديد فيما اذا كان لديه الصلاحية للدخول الى شاشات البرنامج المختلفة ام لا. 

مكونات الشاشة: 

تيكستبوكس اسم المستخدم: اسمه البرمجي (txtUserName):لادخال اسم المستخدم

تيكستبوكس كلمة المرور: اسمه البرمجي (txtPassowrd): لادخال كلمة المرور

ليبيل (Label) * اسم المستخدم غير صحيح اسمها البرمجي (lblUserError): تظهر في حال ادخال اسم مستخدم غير موجود في قاعدة البيانات.

ليبيل (Label)* كلمة المرور غير صحيحة اسمها البرمجي (lblPassError): تظهر في حال ادخال كلمة مرور غير صحيحة لمستخدم موجود.

زر دخول: اسمه البرمجي (btnLogin): لتسجيل الدخول للبرنامج. كود الزر: 

Dim RS As Recordset
Dim db As dao.Database
'==================\
Dim dbs As dao.Database
Dim qdf As QueryDef
Set dbs = CurrentDb

'===================


Set db = CurrentDb
Set RS = db.OpenRecordset("tblUsers", dbOpenSnapshot, dbReadOnly)
RS.FindFirst "User_Name ='" & Me.txtUserName & "'"

If Me.txtUserName.Value <> "" And Me.txtPassowrd.Value <> "" Then
If RS!New_User = True Then
MsgBox "ÇäÊåÊ ÝÊÑÉ ÕáÇÍíÉ ÇáãÓÊÎÏã", vbCritical, "ÊäÈíå"
Exit Sub
End If
If RS.NoMatch = True Then
Me.lblUserError.Visible = True
Me.txtUserName.SetFocus
Exit Sub
End If
Me.lblUserError.Visible = False

If RS!PASS_COUNT >= 3 Then
MsgBox "ÊÌÇæÒ ÚÏÏ ãÍÇæáÇÊ ßáãÉ ÇáãÑæÑ", vbCritical, "ÊäÈíå"
Exit Sub
End If

If RS!User_PASS <> Me.txtPassowrd Then
Me.lblPassError.Visible = True
dbs.Execute "UPDATE tblUsers SET PASS_COUNT= PASS_COUNT + 1 WHERE User_Name= '" & Me.txtUserName.Value & "'"
Me.txtUserName.SetFocus
Exit Sub
End If


Me.lblPassError.Visible = False
TempVars("Roll_ID") = RS!Roll_ID.Value
TempVars("User_Name") = RS!User_Name.Value
TempVars("UserPass") = RS!User_PASS.Value

If RS!IS_NEW = False Then
dbs.Execute "UPDATE tblUsers SET PASS_COUNT= 0 WHERE User_Name= '" & Me.txtUserName.Value & "'"
DoCmd.OpenForm "MFRM_MAINFORM"
Else
DoCmd.OpenForm "FRM_PasswordChange"
End If
DoCmd.Close acForm, Me.Name

سنقوم بشرح بعض الاكواد من كود زر تسجيل الدخول لاهميتها 

If RS!PASS_COUNT >= 3 Then
MsgBox "تجاوو عدد محاولات الدخول", vbCritical, "تنبيه"
Exit Sub
هذا الكود المسؤول عن منع الدخول في حال محاولة الدخول لعدد من المحاولات بكلمة مرور غير صحيحة والرقم 3 هو عدد المحاولات المقصودة ويمكنك تغيير الرقم بما يناسبك.

Else
DoCmd.OpenForm "FRM_PasswordChange"

هذا الكود سيقوم بفتح شاشة تغيير كلمة المرور في حال كان المستخدم جديد ويحاول الدخول لاول مرة للبرنامج او في حال تم تغيير كلمة المرور الخاصة به من طرف مسؤول البرنامج. 




تيسكتبوكس Old Password : اسمه البرمجي (txtOldPass): يتم ادخال كلمة المرور القديمة المراد تغييرها.

تيكستبوكس New Password: اسمه البرمجي (txtNewPass): يتم ادخال كلمة المرور الجديدة.

تيكستبوكس New Password: اسمه البرمجي (txtReNewPass): يتم ادخال كلمة المرور الجديدة.

زر Change: لتنفيذ الامر وتغيير كلمة المرور. كود الزر: 

Dim dbs As dao.Database
Dim qdf As QueryDef
Set dbs = CurrentDb
If Me.txtOldPass.Value = TempVars("UserPass") Then
If Me.txtNewPass.Value = Me.txtReNewPass.Value Then
If Me.txtNewPass.Value <> "" And Me.txtOldPass.Value <> "" And Me.txtReNewPass.Value <> "" Then
dbs.Execute "UPDATE tblUsers SET User_PASS= '" & Me.txtNewPass.Value & "',IS_New=False WHERE User_Name= '" & TempVars("User_Name") & "'"
MsgBox "Êã ÍÝÙ ÇáÊÚÏíáÇÊ", vbInformation, "ÑÓÇáÉ"
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "FRM_LOGIN"

Else

MsgBox "íÑÌì ÇÏÎÇá ßÇÝÉ ÇáÈíÇäÇÊ", vbCritical, "ÊäÈíå"
End If
Else
MsgBox "ßáãÉ ÇáÓÑ ÛíÑ ãØÇÈÞÉ", vbCritical, "ÊäÈíå"
End If
Else
MsgBox "ßáãÉ ÇáãÑæÑ ÛíÑ ÕÍíÍÉ", vbCritical, "ÊäÈíå"
End If

سادساً: تطبيق نظام الصلاحيات 

الان بعد تجهيز كافة الامور الخاصة بنظام الصلاحيات بقي تطبيق النظام على البرنامج. حيث ان النظام لن يعمل بشكل تلقائي ويجب اضافة بعض الاوامر والاكواد الخاصة ليعمل النظام لكل كامل.

1. انشاء مديول (Module): 

لكي يتم التحقق من وجود صلاحية للمستخدم للدخول الى شاشات البرنامج المختلفة يجب انشاء مديول خاص يقوم بعملة الفحص والتحقق. كود المديول: 
Public Function UsersAccess(Form_Name As String) As Boolean
UsersAccess = Nz(DLookup("HasAccess", "tblRollsAccess", "Roll_ID = " & TempVars("Roll_ID") & " AND Form_Name = '" & Form_Name & "'"), False)
End Function

2. تطبيق نظام الصلاحيات: 

الان بدل من استخدام الكود العادي التالي لفتح شاشات البرنامج: 
DoCmd.OpenForm "FRM_LOADSETTSUB"


يتم استبداله بالكود التالي مع تغيير اللون الاحمر باسم الفورم الخاص بك:

If Globals.UsersAccess("FRM_LOADSETTSUB") = False Then
MsgBox "You do not have Permission to Access this Functionality", vbCritical, "Warning"
Else
DoCmd.OpenForm "FRM_LOADSETTSUB"

End If

سابعا: مشاهدة فيديو تطبيقي لنظام الصلاحيات



ثامناً: روابط تحميل ملف قاعدة البيانات


Mediafire Uptobox 1fichier
google-playkhamsatmostaqltradent