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





1- انشاء جدول للمستخدمين يحتوي على رقم واسم المستخدم وكلمة المرور (ونوعهما نص قصير)  

يمكنكم مشاهدة الفيديو او الاستمرار في قرأة الموضوع




2- انشاء جدول للصلاحيات يحتوي على انواع الصلاحيات بالاضافة الى حقل كومبوبوكس بياناته مرتبطة بالمستخدمين (رقم المستخدم واسمه) وحقل كومبوبوكس مرتبط بكائنات البرنامج عن طريق استخدام جدول Msysobjects  (ستجدون الطريقة في الفيديو)

 3- انشاء نموذج للدخول الى قاعدة البيانات وليكن باسم Login
عندما يقوم المستخدم بادخال اسم وكلمة مرور صحيحين يقوم البرنامج بفتح لوحة التحكم او النموذج الرئيسي للعمل كما يقوم بتسجيل رقم المستخدم في المتغير usrID الذي تم تعريفة في الموديل (الموجود في الخطوة 4)
للمزيد يمكن الرجوع الى موضوع انشاء نموذج للدخول الى قاعدة البيانات (انقر هنا) ، ونقوم باضافة جميع الحقول الخاصة بالصلاحيات الية في تذييل النموذج ونجعل التذييل مخفي 


4انشاء دالة يتم استدعاؤها عند فتح اي نموذج نريد ان نضيف له الصلاحيات ( او ادراج كود الصلاحيات في النموذج بشكل مباشر بدون انشاء الدالة
VBA
Public usrID As Integer ' سنستخدم هذا المتغير للاحتفاظ برقم المستخدم


Public Function Privilege(frm As Form)
'------------------------------------------------------------------------------------
'االتاكد من صلاحية اضافة سجل وتفعيلها او تعطيلها
If DLookup("cadd", "TblPrivilege", "StUser=" & usrID & "AND StForm ='" & frm.Name & "'") = False Or IsNull(DLookup("cadd", "TblPrivilege", "StUser=" & usrID & "AND StForm ='" & frm.Name & "'")) Then
frm.AllowAdditions = False
End If

'االتاكد من صلاحية حذف سجل وتفعيلها او تعطيلها
If DLookup("cdell", "TblPrivilege", "StUser=" & usrID & "AND StForm ='" & frm.Name & "'") = False Or IsNull(DLookup("cdell", "TblPrivilege", "StUser=" & usrID & "AND StForm ='" & frm.Name & "'")) Then
frm.AllowDeletions = False
End If

'االتاكد من صلاحية تعديل سجل وتفعيلها او تعطيلها

If DLookup("CEdit", "TblPrivilege", "StUser=" & usrID & "AND StForm ='" & frm.Name & "'") = False Or IsNull(DLookup("CEdit", "TblPrivilege", "StUser=" & usrID & "AND StForm ='" & frm.Name & "'")) Then
frm.AllowEdits = False
End If

End Function



نعود الى النماذج التي نريد تطبيق الصلاحيات عليها وعند فتح النموذج نقوم باستدعاء الدالة Privilege التي انشأناها  بالكود التالي
VBA
Private Sub Form_Open(Cancel As Integer)
Call Privilege(Me)
End Sub


هناك 8 تعليقات:

  1. السلام عليكم كيف استدعي اسم المستخدم Public usrID As Integer في فاتورة

    ردحذف
  2. بارك الله فيك أخي على الدرس الأكثر من الرائع

    ردحذف
  3. السلام عليكم ورحمه الله وبركاته، أخى لكريم شكراً لمجهودك، لكن أنا مش عارف أجيب منين Table "MsysObject"، أرجو الأجابة وشكراً لمجهودك الكريم

    ردحذف
  4. جزاك الله خير على الشرح الممتاز
    وكذلك يجيزك خير انك ارفقة المثال

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

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

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

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

    ردحذف