الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الصلاحيات في الأكسيس(((دعوة للخبير رضا عقيل)))

مغلق
بدأه hassaan100 في 12 أغسطس 2003 · 46 رد · 5,044 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

- شخص مخصص لعملية إدخال البيانات ولا يجوز له الدخول في غيرها ..

- المدير له الأحقية في الدخول إلى جميع البيانات .. وغير ذلك ..

ولا أخفي عليكم ,, أن نفسية المدير كونه من يخوّل الصلاحيات لمن يريد حتى في البرنامج ،، يعكس في ذلك طبعاً رهيباً بداخله في قوة هذا البرنامج ومرونته ..

أفضل مثال للصلاحيات قد رأيته في هذا المنتدى هو ملف أخينا العزيز أبو عقيل .. ومن هنا ندعو أخينا العزيز رضا عقيل بشرح برنامج الصلاحيات .. حتى ولو لم يكن من قام بوضع البرنامج ... فمن المؤكد أنه لن يخالف أبو عقيل على ذلك .. وأيضاً لعدم وجود الأخ أبو عقيل بيننا ليشرح برنامجه بدقة .. رده الله إلينا سالما ..

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

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

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

أدامك الله لنا .. وجزاك الله عنا خير الجزاء .. وبارك الله فيك

أخوك ..

#2

عزيز وغالي يا أخي

ابتداء من الغد بإذن الله سأقوم بكتابة الشرح

وسأضعه في ملف وورد لأني لا أملك صفحه شخصيه أضع بها الصور

وعندما أنتهي منه ستجده في أقرب وقت ممكن بإذن الله في الموضوع الأصلي وفي أكثر من موضع ...

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

أعاده الله إلينا سالماً

وهذا رابط لبرنامج استخدمت فيه نفس الأسلوب

http://www.arabteam2000.com/vb/showthread....&threadid=32448

مع تحياتي

أخوك رضا عقيل

#3

أخي رضا

أعانك ووفقك الله على جهودك الجباره.

ibnmusqat.gif
#4

basmallah.gif

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

أخي العزيز رضا عقيل

بالنسبة لرفع الصور :

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

tahiyat.gif

========

counter2001b.cgi?602678

========

موقع أبو حمود لتعليم الأكسس

http://www.mybiznas.com/access/

صورة
صورة

حسابي في الفيس بوك
http://goo.gl/XIzwL

حسابي في تويتر
http://goo.gl/6p4e3

 

 
 
#5

أخي العزيز رضا عقيل ..

كنت أتوقع منك هذا الرد الذي يثلج الصدر ويعلم الله أني فرحت كثيراً ...

خذ راحتك في الشرح .. أعانك الله وسدد خطاك .. ومنتظرين بفارغ الصبر .. ..(f)(f)(f)

#6

بالتوفيق ان شاء الله ونحن فى الانتظار

80.gif

#7

السلام عليكم

ممكن أن ترسل المثال بالأكسيس 2000 ....

والشكر والدعاء مقدماً ..

mk17481_26bccea871.gif
#8

أخي العزيز فتى الوادي المثال سيكون على الوورد لأنه عبارة عن شرح ...

وجزيت خير الجزاء(f)

#9
اقتباس
أخي العزيز رضا عقيل

بالنسبة لرفع الصور :

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

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

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

الشرح سيكون داخل المشاركه وليس في ملف وورد

مع تحياتي

أخوكم رضا عقيل

#10

يمكنني المساهمة إذا كان هذا يفيد على النحو التالي:

ترسل الصور وتكون قد عرفت أنت من خلال اسم الصورة موضعها في المشاركة ، وسوف أضع الصور جميعها في مجلد على موقعي (35جيجا) ثم أرسل لك الروابط كلها لتضيفها إلى المشاركة.

فإن كان هذا مجدي ومفيد فأتعهد بأن تبقى الصور في موضعها بالرابط ، بإذن الله تعالى ، خلال بقاء مدة تأجير المساحة لنا من المستضيف والتي ستنتهي في شهر 8/2004 ، فإن جددنا العقد بقيت الصور إلى ماشاء الله.

وهذا العرض قائم لكل من أراد الاستفادة منه ، لصالح المنفعة العامة ، فالمساحة التي لدي لم استهلك منها سوى (5 ميجا) تصور الفرق الشاسع.

وبالنسبة لاستهلاك الإنترنت ، فأنا أدفع بالشهر سواء استخدمت الإنترنت أم لا ، وهو مفتوح طوال اليوم (ADSL) ، وقد سبق أن عرضت هذا الأمر العام الماضي هنا ، ولم يستفاد منه.

تحياتي

وما نيل المطالب بالتمني

ولكن تؤخذ الدنيا غلابا

#11

أخي alhaithm جزاك الله خيراً

ارسل لي ايميلك حتى أرسل لك الصور مع العلم ان حجمها 1.2 تقريباً وقد جزئتها لثلاث ملفات فهل مساحة بريدك تصلح لذلك

المهم قل لي كيف أرسلها لك وستجدها عندك اليوم بإذن الله

ولك مني التحية والتقدير على جهودك الطيبة

أخوك رضا عقيل

#12

البريد لدي 10 ميجا

وهو

alhaithm@alhaithm.com

وما نيل المطالب بالتمني

ولكن تؤخذ الدنيا غلابا

#13

السلام عليكم

بارك الله فيك يا استاذنا الهيثم

وما شاء الله تبارك الله جيت وجبت الخير معك

ولا زالت برامجك رائداً في هذا المنتدى

وخاصة شروحك لبرنامج setup install maker

وتحياتي لك يا استاذي

#14

أخي الهيثم أرسلت الصور هل وصلت أم لا

#15

السلام عليكم

أنا كنت أقصد الملف المسمى ( employs-xp )

فإذا كان ممكن أن ترسل لي نسخة على الأكسس 2000 ... فأكون لك من الشاكرين .

والسلام عليكم

mk17481_26bccea871.gif
#16

أخي رضا عقيل

وصلت الصور جميعها وعددها 19 وقد تم وضعها على السيرفر

وأرسلت لك جميع راوبطها على بريد الإلكتروني

وما نيل المطالب بالتمني

ولكن تؤخذ الدنيا غلابا

#17

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

بارك الله فيكم مرة أخرى ..

أخوكم...

#18

ربنا يوفقك ويبارك فيك اخى الهيثم واخى رضا

80.gif

#19

شكرا لكم جميعا

ونحن في الانتظار

#20

جزاكم الله خير الجزاء

#21

بسم الله الرحمن الرحيم

إخواني هذا الشرح مجرد اجتهاد فقط فلست أنا من صنع المثال وأتمنى أن أكون عند حسن ظنكم فلست خبيراً كما تظنون ولكني طالب علم أجتهد فقط لا غير كما أرجوا أن يسامحنى أبو عقيل أعاده الله إلينا سالماً على هذا الشرح السيئ لمثال عبقري من أمثلته .

==========================================

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

إذا الصلاحيات هي فتح النموذج أو التقرير وبكلامنا العادي أننا إذا صنعنا جدول يتم تحديثه كلما تم فتح البرنامج ليكون موجود به اسم المستخدم الحالي فقط وكلمة السر الخاصة به مع مستويات الصلاحيات له ، وعند فتح أي نموذج يذهب البرنامج إلى الجدول ثم يختبر خلية الصلاحية فإذا كانت بنعم ( أو 1) يفتح النموذج وإذا كانت ( لا أو 2) يغلق النموذج مع رسالة بها اسم المستخدم الحالي تقوله له ليس من حقك فتح هذه الشاشة .

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

وفي مثال أخونا أبو عقيل كانت الأدوات كالتالي مع أشكال توضح خصائص الحقول

أ- الجداول

1- جدول المستخدمين ( tb5) وهو الذي سيحتوي على معلومات جميع المستخدمين ويحتوي على

* حقل Name لاسم المستخدم مفتاح يمنع تكرار أسماء المستخدمين

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...l%2ftab01%2ejpg

* حقل rmz لرمز المستخدم والغرض الأساسي منه تمييز المدير أو مالك البرنامج بالرمز ( mas ) ليتم تمييزه عن غيره من المستخدمين وهذا التمييز هو الذي سيستخدم لاحقاً في فتح نموذج الصلاحيات نفسه وهو حقل لا يسمح بالتكرار حتى يكون المسئول واحد فقط .

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...l%2ftab02%2ejpg

* حقل password وهو الخاص بالرمز السري للمستخدم أو الرقم السري وقناع الإدخال يكون password ليكون نجوم ولا يسمح بالتكرار .

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...l%2ftab03%2ejpg

*بعد ذلك تأتي حقول المستويات ( levels ) وهذا الحقل عبارة عن قائمة من عمودين عمود يحتوي على صفين بهما القيمين (1 ،2) والعمود الآخر قيمتين مناظرتين ( نعم ولا ) وتم تغيير خصائص هذا الحقل ليظهر كعمود واحد به الأربع قيم أسفل بعضهم ويتم تخزين القيمة 1 أو 2 في الحقل

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...l%2ftab04%2ejpg

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...tab04%2d2%2ejpg

وسبب الاختيار لخصائص هذا الحقل بهذا الشكل لأنه سيتم إدخال قيم هذا الحقل من نموذج الصلاحيات وستكون القيم الظاهرة في النموذج هي نعم أولا بينما يتم تخزين القيم في الحقل ب 1مناظره لنعم أو 2 مناظره لـ لا

وهكذا حتى المستوى الرابع عشر كما في مثالنا ...

أما البيانات التي ستخزن في هذا الجدول

فهي اسم المستخدم ورمزه ورقمه السري وصلاحياته والتي سنقرنها بنموذج أو أكثر مقابل لكل level بمعنى أننا لو اعتبرنا أن لدينا نموذج form1 سنقرنه بـ level1 فإذا كانت قيمة حقل level1 =1 سنسمح بفتح النموذج أما إذا كانت قيمته 2 سيتم إغلاق النموذج .

الشخص الذي سيوضع رمزه ( حسب مثال أبو عقيل ) = mas هو الذي سيكون له الصلاحيات الكاملة بغض النظر عن اسمه أو كلمة السر الخاصة به . وسنقوم بتغيير جميع مستويات الصلاحية الخاصة به في الجدول إلى الرقم 1

2- جدول fbi وهذا الجدول به نفس الحقول السابقة بحيث أنك تستطيع نسخ الجدول السابق مع تغيير اسمه ثم حذف حقل password منه ولكن أخونا أبو عقيل أضاف حقيلن آخرين وهما date و Time ليستخدمهما في تاريخ وتوقيت الحذف والإضافة والتعديل في البيانات وأعتقد أن هذين الحلقين ليس لهما علاقة مباشرة بموضوع الصلاحيات .

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...l%2ftab05%2ejpg

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

النماذج والاستعلامات .

=======================

1- نموذج إضافة المستخدمين frm-p2 وهو نموذج بسيط مصدره الجدول tb5 يتكون من حقل name وحقل password وحقل rmz وزر أمر ( ذهاب إلى سجل جديد ) ومكتوب عليه إضافة ...

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform01%2ejpg

وعند إضافة أي مستخدم وبما أن حقل name مفتاح وحقل password لا يتكرر وحقل rmz لا يتكرر بذلك لن يسمح بإدخل مستخدم مرتين مع ملاحظة عند إدخال معلومات المسئول أو المدير يجب أن يأخذ حقل الرمز القيمة mas ( كما في مثالنا ) . وعند إضافة الحقول الثلاثة سيتم إعطاء القيمة 2 لكل مستويات الصلاحية لأنها القيمة الافتراضية . وعندما نريد تغيير هذه القيمة سيكون من نموذج الصلاحيات لاحقاً . .

2- نموذج حذف مستخدم frm-p5

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform02%2ejpg

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform03%2ejpg

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

كما يوجد بالنموذج زر أمر حذف السجل وتم إنشاؤه بواسطة المعالج مع إضافة 3 أسطر من الكود إليه كما بالشكل

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform04%2ejpg

3- نموذج تعديل بيانات مستخدم frm-p5

وهذا النموذج مثل سابقه مصدر السجل فيه عبارة عن جملة sql استعلام تم إنشائه عن طريق منشئ الاستعلامات داخل الخصائص ويتم تحديد السجل الحالي بناءاً على الاسم الذي يتم إدخاله في حقل الاسم في النموذج فعند كتابة اسم مستخدم في حقل الاسم يتم تحديد السجل والذي يتساوى فيه الاسم مع حقل name تمهيداً للتعامل مع هذا السجل مع وضع قيمة الاسم من الجدول في حقل mes المخفي على النموذج وكذلك كلمة السر المناظره للاسم في حقل pasword على النموذج إيضاً

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform05%2ejpg

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform06%2ejpg

في النموذج يوجد حقلين غير منضمين في النموذج وهما name و pas

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

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform07%2ejpg

إذا كان المستخدم ضمن المستخدمين والاسم صحيح سينتقل المؤشر إلى خلية كلمة المرور السابقة والتي اسمها pas وهي حقل غير منضم وبعد كتابة كلمة المرور يتم التأكد من أن كلمة المرور المدخله تساوي كلمة المرور الخاصة بذلك المستخدم فعلاً وإذا لم تساويها يتم اصدار رسالة تفيد ذلك مع إخلاء الحقل والرجوع لنفس الحقل لكتابته من جديد ويتم ذلك بوضع كود في خصائص الحقل pas في حديث بعد التحديث كما بالشكل التالي

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform08%2ejpg

وإذا كانت كلمة المرور صحيحة سيتم إظهار حقل password وهو لتغيير كلمة المرور .

وبما أن الحقل pasword هو من الجدول نفسه فأي تحديث للحقل يتم التحديث في الجدول مباشرة ولكن كيف نحمي هذا الحقل من التحديث المباشر ... ببساطه لن يتم تمكين أو إظهار هذا الحقل أو زر الأمر حفظ إلا إذا كانت كلمة المرور صحيحة والاسم موجود فعلاً ....

وزر الأمر حفظ مهمته إخلاء جميع الحقول مره ثانيه تمهيداً لتعديل مستخدم آخر أو إيذاناً بانتهاء التعديلات المطلوبة .

4- نموذج صلاحيات المستخدمين (( النموذج الأساس )) frm-p6

هذا النموذج هو الذي سنقوم بإعداد الصلاحيات للمستخدمين من خلاله ولكن قبل إعداد هذا النموذج يجب عليك تحديد مستويات الصاحيات أولاً .. بمعنى

لدينا الآن 14 مستوى صلاحيات قابل للزيادة مع التعديل في الاستعلامات ومن الممكن استخدام أي عدد منهم وترك الباقي وفي مثال أبو عقيل استخدم 7 مستويات فقط

مقابل هذه المستويات يجب أن يكون هناك نماذج أو تقارير

أي النموذج رقم واحد مقابل للمستوى واحد ..... فإذا كان للمستخدم القيمة (1) في level1 يقوم البرنامج بالسماح له بفتح النموذج واحد وإذا كانت القيمة 2 لا يسمح له بفتح النموذج

وبالنسبة لمثال أبو عقيل كانت المستويات كالتالي

Level1 ========> نموذج f1 تسجيل موظف جديد

Level2 ========> نموذج f2-3 تعديل معلومات موظف

Level6 ========> نموذج frm-p2 تسجيل مستخدم جديد

Level7 ========> نموذج frm-p5 حذف مستخدم

Level3 ========> نموذج f-rturn إعادة موظف

Level8 ========> نموذج name معلومات المنشأة

Level9 ========> نموذج tar أساسيات البرنامج

ولنرى الآن النموذج frm-p6 ولماذا لم نرى له صلاحية ضمن مستويات الصلاحيات مع أنه محمى ومحجوب عن المستخدمين وممنوح صلاحيته للمدير أو المسئول وهذا ما سنعرفه

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform09%2ejpg

النموذج مصدره جملة sql تم انشائها عن طريق منشئ الاستعلامات داخل خصائص النموذج كما بالشكل السابق وبنفس أسلو ب وطريق عمل النماذج السابقة .... أما مصدر الصف نفسه للحقل user فهو أيضاً جملة sql مبنيه بمنشئ الاستعلامات داخل الخصائص ومهمتها عرض أسماء المستخدمين جميعاً من الجدول ما عدا المستخدم الذي قيمة الحقل rmz له تساوي mas أي عرض جميع المستخدمين ما عدا المسئول فهو دائماً صلاحياته مفتوحه لا ويحتاج لتعديل صلاحيات نفسه ....

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform10%2ejpg

وعند اختيار اسم المستخدم سيتم تحديث حقول levels في النموذج بيانات المستخدم بناءاً على معيار اسم المستخدم نفسه ...مع وضع الكود التالي بعد في حدث بعد التحديث للحقل usre

DoCmd.Requery  'تحديث النموذج لعرض الحقول 
DoCmd.GoToControl "level1"  'الذهاب إلى الحقل الأول

الآن بعد اختيار اسم المستخدم وعرض صلاحياته نستطيع التعديل فيه بتغيير قيم levels من لا إلى نعم والتي ستقوم بتخزين القيم 1 بدلاً من نعم في الجدول والقيمة 2 بدلاً من لا كما أسلفنا في الحديث عن الجداول .

وبعد تعديل الصلاحيات للمستخدم وبالضغط على زر أمر حفظ التغييرات الجديدة للمستخدم يتم الحفظ مع إخلاء حقل user وكذلك تحديث النموذج ليعود كما تم الفتح عليه تمهيداً للتعديل في مستخدم جديد مع وضع الكود التالي في حدث عند الضغط لزر الأمر

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    DoCmd.GoToControl "user"
    Me![user] = Null
    DoCmd.Requery

*************

الآن نصل لأهم نقطه وهى كيفية تعريف الصلاحية للنموذج

يتم إنشاء حقل يوضع على كل نموذج نريد عمل صلاحية له أو أي تقرير نريد عمل صلاحية له وهذا الحقل به دالة

وهنا الصلاحية تنقسم إلا قسمين

الأول == صلاحيات للمسئول فقط

الثاني == صلاحيات للمستخدمين

قلنا من قبل أن لكل نموذج أو تقرير يوجد مستوى صلاحية مناظر له وكل ما علينا هو استحضار قيمة هذا المستوى من جدول fbi وهو الذي تم إلحاق بينات المستخدم الحالي له بحيث نرى هل قيمة هذا المستوى لهذا المستخدم هى 1 أم 2 فغذا كان 1 يتم فنح النموذج أما إذا كانت 2 يتم إغلاق النموذج مع إظهار رسالة تفيد بعدم صلاحية المستخدم لهذا الإجراء ..

أما بالنسبة للمسؤل أوالمدير فيتم البحث عن قيم الحقل emz وليس level لأنه هو الوحيد الذي سيكون رمزه mas أي مسئول وعند فتح النموذج إذا وجدنا أن قيمة هذا الحقل هي mas يفتح النموذج وإلا فليس له صلاحية الفتح أي ليس هو المسئول ..

وفي المثال أو صلاحيات المستخدمين (( النموذج الأساس )) frm-p6

يوجد الحقل rmz وهو غير مرئي للمستخدم ويوجد به الدالة التالية

=DLookUp("[rmz]";"fbi")

وهي الخاصة بإرجاء القيمة للحقل rmz من جدول fbi ووضعها في هذا الحقل ليتم المقارنه بعد ذلك بالكود

وفي حدث عند الفتح للنموذج تم وضع الكود التالي وهو كود الصلاحية في جميع النموذج مع اختلاف طفيف من المسئول إلى المستخدم

Private Sub Form_Open(Cancel As Integer)
If Me![rmz] = "mas" Then   'إذا كان الحقل rmzقيمته تساوي mas
DoCmd.OpenForm "frm-p6"  'افتح النموذج 
Else  ' وإلا 
Beep    'صوت   
Dim zm   'إعلان عن متغير 
zm = DLookup("[user]", "fbi")    'المتغير يساوي اسم المستخدم الحالي 
MsgBox "عفوا يا سيد   " & "( " & zm & " )" & " شاشة الصلاحيات والتحكم من اختصاص المسئول فقط  !!!! ", vbOKOnly, "تحذيـــــــر"
DoCmd.Close    'اغلق النموذج 
End If

End Sub

هذا الكود هو الأساسي وببساطه يقوم مقارنة الحقل rmz في النموذج والذي أخذ قيمته بالدالة السابقة وهل هذه القيمة هي mas أم لا وعلى هذا الأساس يتم فتح النموذج .

أ========

أما النسبة للصلاحية للمستخدمين فنأخذ مثال عليها نموذج tar وبه مستوى الصلاحية level9

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform11%2ejpg

حقل الصلاحية هو الحقل الغير مرئي للمستخدم level9 وبه دالة

=DLookUp("[level9]";"fbi")

وهذه الدالة تقوم بإرجاع القيمة داخل الحقل level9 داخل الجدول fbi

وفي حدث عند الفتح يتم وضع الكود التالي ونلاحظ أنه يختلف عن الكود السابق بدلاً من القيمة rmz نضع القيمة 1

Private Sub Form_Open(Cancel As Integer)
If Me![level9] = 1 Then  '       موضع الاختلاف في القيمة
DoCmd.OpenForm "tar"
DoCmd.GoToControl "no1"
Else
Beep
Dim zm
zm = DLookup("[user]", "fbi")
MsgBox "عفوا يا سيد /  " & "( " & zm & " )" & " ليس لك الحق بالدخول لهذه الشاشة ", vbOKOnly, "تحذيـــــــر"
DoCmd.Close
End If
End Sub

====

بذلك نكون تطرقنا لجوانب الحماية وبقي شاشة الدخول إلى البرنامج

النموذج frm-p1 وهو الخاص بالدخول إلى البرنامج وتسجيل اسم المستخدم وكلمة المرور

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

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform12%2ejpg

عندما يدخل المستخدم اسماً في حقل اسم المستخدم name يتم تحديث الحقل المخفي password ليحتوي على قيمة كلمة المرور المأخوذه من جدول fb5 بناءا على اسم المستخدم ... وللتأكد من وجود المستخدم ضمن المستخدمين من عدمه يوضع الكود التالي في حدث بعد التحديث للحقل name مع إظهار رسالة تفيد عدم وجود المستخدم ضمن المستخدمين المعتمدين

Private Sub name_AfterUpdate()
DoCmd.Requery
If (Eval("[Forms]![frm-p1]![pasword] Is Null")) Then
Beep
MsgBox "åÐÇ ÇáãÓÊÎÏã ÛíÑ ãæÌæÏ Öãä ÇáãÓÊÎÏãíä ÇáãÚÊãÏíä ÈÇáÍÇÓÈ..  ÊÃßÏ ãä ÇÓã ÇáãÓÊÎÏã ÃæáÇ !!!", vbInformation, "ÑÓÇáÉ ÊÍÐíÑíÉ"
DoCmd.GoToControl "name"
Me![name] = Null
 End If
  If (Eval("[Forms]![frm-p1]![pasword] Is Not Null")) Then
  DoCmd.GoToControl "zm"
  End If
End Sub

وعند وجود المستخدم فعلاً يتم نقل المؤشر إلى خانة كلمة المرور الحقل zm لكتابة كلمة المرور وبعد تحديث هذا الحقل يتم تشغيل الكود التالي ليتأكد البرنامج أن كلمة المرور التي كتبها المستخدم مطابقة لتلك المخزنة له في الجدول tb5 والكود التالي يوضع في حدث بعد التحديث للحق zm

For r = 1 To 3
x = Me![pasword]
If Me.zm = "12369874" Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "q4", acNormal, acEdit   ' هذا الاستعلام غير موجود في المثال
DoCmd.SetWarnings True
DoCmd.Close
End
End If
If Me.zm = x Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "q6", acNormal, acEdit ' استعلام إلحاق بيانات المستخدم الحالي بالجدول fbi
DoCmd.SetWarnings True
DoCmd.Close
'docmd.OpenForm " "
End
Else
Beep
MsgBox "كلمة المرور خاطئة ... حاول مرة أخرى", 48, ""محاولة أخرى
End
End If
Next r
MsgBox "لا محاولات أخرى فضلاً اتصل على المبرمج على الرقم 55555555  !", 48, ""خروج نهائي من البرنامج
DoCmd.Quit
End Sub

ولي ملاحظة على هذا الكود أولاً القسم الأول منه يختبر الحقل zm فإذا ساوى الرقم 12369874 يتم تشغيل استعلام q4 وهذا الاستعلام أساساً غير موجود في المثال وأتوقع انه يقوم بحذف جميع المستخدمين من الجدول tb5 بما فيهم المدير أو المسئول حتى يتسنى للمبرمج إضافة مسؤول جديد وكلمة مرور جديدة له ... وهذا يحدث عند تحميل البرنامج لأول مره مثلاً .. وهذه الملاحظة مجرد استنتاج فكما تعلمون لست أنا من صنع المثال ..

والجزء الثاني من الكود يقوم باختبار نفس الحقل zm فإذا وجده يساوي الحقل password طبعاً بالإعلان عن متغيرات مع عد لعدد المحاولات وإذا وجد القيمين متطابقين يدخل البرنامج وإلا يخرج من البرنامج بعد عدد معين من المحاولات

http://64.4.8.250/cgi-bin/linkrd?_lang=EN&...%2fform13%2ejpg

أما الاستعلام الوحيد الخارجي الذي استخدمه أبو عقيل في الصلاحيات فهو الاستعلام q6 وهو استعلام تحديث يقوم بأخذ قيم سجل المستخدم الحالي بعد أن أدخل اسمه وكلمة مروره الصحيحه ويحدث بها بيانات الجدول fbi ليكون هذا الجدول دائماً هو جدول المستخدم الحالي .

ملاحظات :

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

هذا كل شيء

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

مع تحياتي

أخوكم رضا عقيل

#22

بسم الله الرحمن الرحيم

إخواني هذا الشرح مجرد اجتهاد فقط فلست أنا من صنع المثال وأتمنى أن أكون عند حسن ظنكم فلست خبيراً كما تظنون ولكني طالب علم أجتهد فقط لا غير كما أرجوا أن يسامحنى أبو عقيل أعاده الله إلينا سالماً على هذا الشرح السيئ لمثال عبقري من أمثلته .

==========================================

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

إذا الصلاحيات هي فتح النموذج أو التقرير وبكلامنا العادي أننا إذا صنعنا جدول يتم تحديثه كلما تم فتح البرنامج ليكون موجود به اسم المستخدم الحالي فقط وكلمة السر الخاصة به مع مستويات الصلاحيات له ، وعند فتح أي نموذج يذهب البرنامج إلى الجدول ثم يختبر خلية الصلاحية فإذا كانت بنعم ( أو 1) يفتح النموذج وإذا كانت ( لا أو 2) يغلق النموذج مع رسالة بها اسم المستخدم الحالي تقوله له ليس من حقك فتح هذه الشاشة .

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

وفي مثال أخونا أبو عقيل كانت الأدوات كالتالي مع أشكال توضح خصائص الحقول

أ- الجداول

1- جدول المستخدمين ( tb5) وهو الذي سيحتوي على معلومات جميع المستخدمين ويحتوي على

* حقل Name لاسم المستخدم مفتاح يمنع تكرار أسماء المستخدمين

linkrd?_lang=EN&lah=b6b3e61d2192b4dde09f8fb2d0c08cad&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2ftab01%2ejpg

* حقل rmz لرمز المستخدم والغرض الأساسي منه تمييز المدير أو مالك البرنامج بالرمز ( mas ) ليتم تمييزه عن غيره من المستخدمين وهذا التمييز هو الذي سيستخدم لاحقاً في فتح نموذج الصلاحيات نفسه وهو حقل لا يسمح بالتكرار حتى يكون المسئول واحد فقط .

linkrd?_lang=EN&lah=88c6cef5450b090037deee1b7004dbe6&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2ftab02%2ejpg

* حقل password وهو الخاص بالرمز السري للمستخدم أو الرقم السري وقناع الإدخال يكون password ليكون نجوم ولا يسمح بالتكرار .

linkrd?_lang=EN&lah=644c2065caab16694b4b12f499ba3203&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2ftab03%2ejpg

*بعد ذلك تأتي حقول المستويات ( levels ) وهذا الحقل عبارة عن قائمة من عمودين عمود يحتوي على صفين بهما القيمين (1 ،2) والعمود الآخر قيمتين مناظرتين ( نعم ولا ) وتم تغيير خصائص هذا الحقل ليظهر كعمود واحد به الأربع قيم أسفل بعضهم ويتم تخزين القيمة 1 أو 2 في الحقل

linkrd?_lang=EN&lah=931440c1962b1969a2c40ecee016b109&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2ftab04%2ejpg

linkrd?_lang=EN&lah=20b4fc3c0d5d9011a5202be5b62801f3&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2ftab04%2d2%2ejpg

وسبب الاختيار لخصائص هذا الحقل بهذا الشكل لأنه سيتم إدخال قيم هذا الحقل من نموذج الصلاحيات وستكون القيم الظاهرة في النموذج هي نعم أولا بينما يتم تخزين القيم في الحقل ب 1مناظره لنعم أو 2 مناظره لـ لا

وهكذا حتى المستوى الرابع عشر كما في مثالنا ...

أما البيانات التي ستخزن في هذا الجدول

فهي اسم المستخدم ورمزه ورقمه السري وصلاحياته والتي سنقرنها بنموذج أو أكثر مقابل لكل level بمعنى أننا لو اعتبرنا أن لدينا نموذج form1 سنقرنه بـ level1 فإذا كانت قيمة حقل level1 =1 سنسمح بفتح النموذج أما إذا كانت قيمته 2 سيتم إغلاق النموذج .

الشخص الذي سيوضع رمزه ( حسب مثال أبو عقيل ) = mas هو الذي سيكون له الصلاحيات الكاملة بغض النظر عن اسمه أو كلمة السر الخاصة به . وسنقوم بتغيير جميع مستويات الصلاحية الخاصة به في الجدول إلى الرقم 1

2- جدول fbi وهذا الجدول به نفس الحقول السابقة بحيث أنك تستطيع نسخ الجدول السابق مع تغيير اسمه ثم حذف حقل password منه ولكن أخونا أبو عقيل أضاف حقيلن آخرين وهما date و Time ليستخدمهما في تاريخ وتوقيت الحذف والإضافة والتعديل في البيانات وأعتقد أن هذين الحلقين ليس لهما علاقة مباشرة بموضوع الصلاحيات .

linkrd?_lang=EN&lah=16e479682f24b6fe3b328bf387c93d85&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2ftab05%2ejpg

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

النماذج والاستعلامات .

=======================

1- نموذج إضافة المستخدمين frm-p2 وهو نموذج بسيط مصدره الجدول tb5 يتكون من حقل name وحقل password وحقل rmz وزر أمر ( ذهاب إلى سجل جديد ) ومكتوب عليه إضافة ...

linkrd?_lang=EN&lah=4e29e9243ff0c522ff35ecab07ccc4a3&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform01%2ejpg

وعند إضافة أي مستخدم وبما أن حقل name مفتاح وحقل password لا يتكرر وحقل rmz لا يتكرر بذلك لن يسمح بإدخل مستخدم مرتين مع ملاحظة عند إدخال معلومات المسئول أو المدير يجب أن يأخذ حقل الرمز القيمة mas ( كما في مثالنا ) . وعند إضافة الحقول الثلاثة سيتم إعطاء القيمة 2 لكل مستويات الصلاحية لأنها القيمة الافتراضية . وعندما نريد تغيير هذه القيمة سيكون من نموذج الصلاحيات لاحقاً . .

2- نموذج حذف مستخدم frm-p5

linkrd?_lang=EN&lah=534144f53f3d353f46d2987d531d0d9a&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform02%2ejpg

linkrd?_lang=EN&lah=7dea86e5e2058aa022df21b558d1f505&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform03%2ejpg

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

كما يوجد بالنموذج زر أمر حذف السجل وتم إنشاؤه بواسطة المعالج مع إضافة 3 أسطر من الكود إليه كما بالشكل

linkrd?_lang=EN&lah=deb43994610e85c14ebf283397060e82&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform04%2ejpg

3- نموذج تعديل بيانات مستخدم frm-p5

وهذا النموذج مثل سابقه مصدر السجل فيه عبارة عن جملة sql استعلام تم إنشائه عن طريق منشئ الاستعلامات داخل الخصائص ويتم تحديد السجل الحالي بناءاً على الاسم الذي يتم إدخاله في حقل الاسم في النموذج فعند كتابة اسم مستخدم في حقل الاسم يتم تحديد السجل والذي يتساوى فيه الاسم مع حقل name تمهيداً للتعامل مع هذا السجل مع وضع قيمة الاسم من الجدول في حقل mes المخفي على النموذج وكذلك كلمة السر المناظره للاسم في حقل pasword على النموذج إيضاً

linkrd?_lang=EN&lah=0a34e6abb0988d6b3af9891008244dc4&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform05%2ejpg

linkrd?_lang=EN&lah=272f834c7dfeb24c53aa965d0629f313&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform06%2ejpg

في النموذج يوجد حقلين غير منضمين في النموذج وهما name و pas

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

linkrd?_lang=EN&lah=28929eea9c9852313b6285accf4dedfb&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform07%2ejpg

إذا كان المستخدم ضمن المستخدمين والاسم صحيح سينتقل المؤشر إلى خلية كلمة المرور السابقة والتي اسمها pas وهي حقل غير منضم وبعد كتابة كلمة المرور يتم التأكد من أن كلمة المرور المدخله تساوي كلمة المرور الخاصة بذلك المستخدم فعلاً وإذا لم تساويها يتم اصدار رسالة تفيد ذلك مع إخلاء الحقل والرجوع لنفس الحقل لكتابته من جديد ويتم ذلك بوضع كود في خصائص الحقل pas في حديث بعد التحديث كما بالشكل التالي

linkrd?_lang=EN&lah=6bed2b6391875b89a0f0f8eaddad883c&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform08%2ejpg

وإذا كانت كلمة المرور صحيحة سيتم إظهار حقل password وهو لتغيير كلمة المرور .

وبما أن الحقل pasword هو من الجدول نفسه فأي تحديث للحقل يتم التحديث في الجدول مباشرة ولكن كيف نحمي هذا الحقل من التحديث المباشر ... ببساطه لن يتم تمكين أو إظهار هذا الحقل أو زر الأمر حفظ إلا إذا كانت كلمة المرور صحيحة والاسم موجود فعلاً ....

وزر الأمر حفظ مهمته إخلاء جميع الحقول مره ثانيه تمهيداً لتعديل مستخدم آخر أو إيذاناً بانتهاء التعديلات المطلوبة .

4- نموذج صلاحيات المستخدمين (( النموذج الأساس )) frm-p6

هذا النموذج هو الذي سنقوم بإعداد الصلاحيات للمستخدمين من خلاله ولكن قبل إعداد هذا النموذج يجب عليك تحديد مستويات الصاحيات أولاً .. بمعنى

لدينا الآن 14 مستوى صلاحيات قابل للزيادة مع التعديل في الاستعلامات ومن الممكن استخدام أي عدد منهم وترك الباقي وفي مثال أبو عقيل استخدم 7 مستويات فقط

مقابل هذه المستويات يجب أن يكون هناك نماذج أو تقارير

أي النموذج رقم واحد مقابل للمستوى واحد ..... فإذا كان للمستخدم القيمة (1) في level1 يقوم البرنامج بالسماح له بفتح النموذج واحد وإذا كانت القيمة 2 لا يسمح له بفتح النموذج

وبالنسبة لمثال أبو عقيل كانت المستويات كالتالي

Level1 ========> نموذج f1 تسجيل موظف جديد

Level2 ========> نموذج f2-3 تعديل معلومات موظف

Level6 ========> نموذج frm-p2 تسجيل مستخدم جديد

Level7 ========> نموذج frm-p5 حذف مستخدم

Level3 ========> نموذج f-rturn إعادة موظف

Level8 ========> نموذج name معلومات المنشأة

Level9 ========> نموذج tar أساسيات البرنامج

ولنرى الآن النموذج frm-p6 ولماذا لم نرى له صلاحية ضمن مستويات الصلاحيات مع أنه محمى ومحجوب عن المستخدمين وممنوح صلاحيته للمدير أو المسئول وهذا ما سنعرفه

linkrd?_lang=EN&lah=8b0f8ebf8617e935d0b5e066d0800d8b&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform09%2ejpg

النموذج مصدره جملة sql تم انشائها عن طريق منشئ الاستعلامات داخل خصائص النموذج كما بالشكل السابق وبنفس أسلو ب وطريق عمل النماذج السابقة .... أما مصدر الصف نفسه للحقل user فهو أيضاً جملة sql مبنيه بمنشئ الاستعلامات داخل الخصائص ومهمتها عرض أسماء المستخدمين جميعاً من الجدول ما عدا المستخدم الذي قيمة الحقل rmz له تساوي mas أي عرض جميع المستخدمين ما عدا المسئول فهو دائماً صلاحياته مفتوحه لا ويحتاج لتعديل صلاحيات نفسه ....

linkrd?_lang=EN&lah=9bedb40ec7becc749baca40abd1d1539&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform10%2ejpg

وعند اختيار اسم المستخدم سيتم تحديث حقول levels في النموذج بيانات المستخدم بناءاً على معيار اسم المستخدم نفسه ...مع وضع الكود التالي بعد في حدث بعد التحديث للحقل usre

DoCmd.Requery  'تحديث النموذج لعرض الحقول 
DoCmd.GoToControl "level1"  'الذهاب إلى الحقل الأول

الآن بعد اختيار اسم المستخدم وعرض صلاحياته نستطيع التعديل فيه بتغيير قيم levels من لا إلى نعم والتي ستقوم بتخزين القيم 1 بدلاً من نعم في الجدول والقيمة 2 بدلاً من لا كما أسلفنا في الحديث عن الجداول .

وبعد تعديل الصلاحيات للمستخدم وبالضغط على زر أمر حفظ التغييرات الجديدة للمستخدم يتم الحفظ مع إخلاء حقل user وكذلك تحديث النموذج ليعود كما تم الفتح عليه تمهيداً للتعديل في مستخدم جديد مع وضع الكود التالي في حدث عند الضغط لزر الأمر

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    DoCmd.GoToControl "user"
    Me![user] = Null
    DoCmd.Requery

*************

الآن نصل لأهم نقطه وهى كيفية تعريف الصلاحية للنموذج

يتم إنشاء حقل يوضع على كل نموذج نريد عمل صلاحية له أو أي تقرير نريد عمل صلاحية له وهذا الحقل به دالة

وهنا الصلاحية تنقسم إلا قسمين

الأول == صلاحيات للمسئول فقط

الثاني == صلاحيات للمستخدمين

قلنا من قبل أن لكل نموذج أو تقرير يوجد مستوى صلاحية مناظر له وكل ما علينا هو استحضار قيمة هذا المستوى من جدول fbi وهو الذي تم إلحاق بينات المستخدم الحالي له بحيث نرى هل قيمة هذا المستوى لهذا المستخدم هى 1 أم 2 فغذا كان 1 يتم فنح النموذج أما إذا كانت 2 يتم إغلاق النموذج مع إظهار رسالة تفيد بعدم صلاحية المستخدم لهذا الإجراء ..

أما بالنسبة للمسؤل أوالمدير فيتم البحث عن قيم الحقل emz وليس level لأنه هو الوحيد الذي سيكون رمزه mas أي مسئول وعند فتح النموذج إذا وجدنا أن قيمة هذا الحقل هي mas يفتح النموذج وإلا فليس له صلاحية الفتح أي ليس هو المسئول ..

وفي المثال أو صلاحيات المستخدمين (( النموذج الأساس )) frm-p6

يوجد الحقل rmz وهو غير مرئي للمستخدم ويوجد به الدالة التالية

=DLookUp("[rmz]";"fbi")

وهي الخاصة بإرجاء القيمة للحقل rmz من جدول fbi ووضعها في هذا الحقل ليتم المقارنه بعد ذلك بالكود

وفي حدث عند الفتح للنموذج تم وضع الكود التالي وهو كود الصلاحية في جميع النموذج مع اختلاف طفيف من المسئول إلى المستخدم

Private Sub Form_Open(Cancel As Integer)
If Me![rmz] = "mas" Then   'إذا كان الحقل rmzقيمته تساوي mas
DoCmd.OpenForm "frm-p6"  'افتح النموذج 
Else  ' وإلا 
Beep    'صوت   
Dim zm   'إعلان عن متغير 
zm = DLookup("[user]", "fbi")    'المتغير يساوي اسم المستخدم الحالي 
MsgBox "عفوا يا سيد   " & "( " & zm & " )" & " شاشة الصلاحيات والتحكم من اختصاص المسئول فقط  !!!! ", vbOKOnly, "تحذيـــــــر"
DoCmd.Close    'اغلق النموذج 
End If

End Sub

هذا الكود هو الأساسي وببساطه يقوم مقارنة الحقل rmz في النموذج والذي أخذ قيمته بالدالة السابقة وهل هذه القيمة هي mas أم لا وعلى هذا الأساس يتم فتح النموذج .

أ========

أما النسبة للصلاحية للمستخدمين فنأخذ مثال عليها نموذج tar وبه مستوى الصلاحية level9

linkrd?_lang=EN&lah=41208e5359372fd6d1e36ef4d7a0dccc&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform11%2ejpg

حقل الصلاحية هو الحقل الغير مرئي للمستخدم level9 وبه دالة

=DLookUp("[level9]";"fbi")

وهذه الدالة تقوم بإرجاع القيمة داخل الحقل level9 داخل الجدول fbi

وفي حدث عند الفتح يتم وضع الكود التالي ونلاحظ أنه يختلف عن الكود السابق بدلاً من القيمة rmz نضع القيمة 1

Private Sub Form_Open(Cancel As Integer)
If Me![level9] = 1 Then  '       موضع الاختلاف في القيمة
DoCmd.OpenForm "tar"
DoCmd.GoToControl "no1"
Else
Beep
Dim zm
zm = DLookup("[user]", "fbi")
MsgBox "عفوا يا سيد /  " & "( " & zm & " )" & " ليس لك الحق بالدخول لهذه الشاشة ", vbOKOnly, "تحذيـــــــر"
DoCmd.Close
End If
End Sub

====

بذلك نكون تطرقنا لجوانب الحماية وبقي شاشة الدخول إلى البرنامج

النموذج frm-p1 وهو الخاص بالدخول إلى البرنامج وتسجيل اسم المستخدم وكلمة المرور

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

linkrd?_lang=EN&lah=e12ba08c0301e7ffee78b6f92c7612ea&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform12%2ejpg

عندما يدخل المستخدم اسماً في حقل اسم المستخدم name يتم تحديث الحقل المخفي password ليحتوي على قيمة كلمة المرور المأخوذه من جدول fb5 بناءا على اسم المستخدم ... وللتأكد من وجود المستخدم ضمن المستخدمين من عدمه يوضع الكود التالي في حدث بعد التحديث للحقل name مع إظهار رسالة تفيد عدم وجود المستخدم ضمن المستخدمين المعتمدين

Private Sub name_AfterUpdate()
DoCmd.Requery
If (Eval("[Forms]![frm-p1]![pasword] Is Null")) Then
Beep
MsgBox "åÐÇ ÇáãÓÊÎÏã ÛíÑ ãæÌæÏ Öãä ÇáãÓÊÎÏãíä ÇáãÚÊãÏíä ÈÇáÍÇÓÈ..  ÊÃßÏ ãä ÇÓã ÇáãÓÊÎÏã ÃæáÇ !!!", vbInformation, "ÑÓÇáÉ ÊÍÐíÑíÉ"
DoCmd.GoToControl "name"
Me![name] = Null
 End If
  If (Eval("[Forms]![frm-p1]![pasword] Is Not Null")) Then
  DoCmd.GoToControl "zm"
  End If
End Sub

وعند وجود المستخدم فعلاً يتم نقل المؤشر إلى خانة كلمة المرور الحقل zm لكتابة كلمة المرور وبعد تحديث هذا الحقل يتم تشغيل الكود التالي ليتأكد البرنامج أن كلمة المرور التي كتبها المستخدم مطابقة لتلك المخزنة له في الجدول tb5 والكود التالي يوضع في حدث بعد التحديث للحق zm

For r = 1 To 3
x = Me![pasword]
If Me.zm = "12369874" Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "q4", acNormal, acEdit   ' هذا الاستعلام غير موجود في المثال
DoCmd.SetWarnings True
DoCmd.Close
End
End If
If Me.zm = x Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "q6", acNormal, acEdit ' استعلام إلحاق بيانات المستخدم الحالي بالجدول fbi
DoCmd.SetWarnings True
DoCmd.Close
'docmd.OpenForm " "
End
Else
Beep
MsgBox "كلمة المرور خاطئة ... حاول مرة أخرى", 48, ""محاولة أخرى
End
End If
Next r
MsgBox "لا محاولات أخرى فضلاً اتصل على المبرمج على الرقم 55555555  !", 48, ""خروج نهائي من البرنامج
DoCmd.Quit
End Sub

ولي ملاحظة على هذا الكود أولاً القسم الأول منه يختبر الحقل zm فإذا ساوى الرقم 12369874 يتم تشغيل استعلام q4 وهذا الاستعلام أساساً غير موجود في المثال وأتوقع انه يقوم بحذف جميع المستخدمين من الجدول tb5 بما فيهم المدير أو المسئول حتى يتسنى للمبرمج إضافة مسؤول جديد وكلمة مرور جديدة له ... وهذا يحدث عند تحميل البرنامج لأول مره مثلاً .. وهذه الملاحظة مجرد استنتاج فكما تعلمون لست أنا من صنع المثال ..

والجزء الثاني من الكود يقوم باختبار نفس الحقل zm فإذا وجده يساوي الحقل password طبعاً بالإعلان عن متغيرات مع عد لعدد المحاولات وإذا وجد القيمين متطابقين يدخل البرنامج وإلا يخرج من البرنامج بعد عدد معين من المحاولات

linkrd?_lang=EN&lah=77566757dd6fa3e6c64e3a954dc2ca56&lat=1060948197&hm___action=http%3a%2f%2falhaithm%2einfinology%2ecom%2fokail%2fform13%2ejpg

أما الاستعلام الوحيد الخارجي الذي استخدمه أبو عقيل في الصلاحيات فهو الاستعلام q6 وهو استعلام تحديث يقوم بأخذ قيم سجل المستخدم الحالي بعد أن أدخل اسمه وكلمة مروره الصحيحه ويحدث بها بيانات الجدول fbi ليكون هذا الجدول دائماً هو جدول المستخدم الحالي .

ملاحظات :

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

هذا كل شيء

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

مع تحياتي

أخوكم رضا عقيل

#23

إخواني

لماذا لم تظهر الصور

فهذه اول مرة أضيف صور إلى موضوع

#24

بسم الله الرحمن الرحيم

إخواني هذا الشرح مجرد اجتهاد فقط فلست أنا من صنع المثال وأتمنى أن أكون عند حسن ظنكم فلست خبيراً كما تظنون ولكني طالب علم أجتهد فقط لا غير كما أرجوا أن يسامحنى أبو عقيل أعاده الله إلينا سالماً على هذا الشرح السيئ لمثال عبقري من أمثلته .

==========================================

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

إذا الصلاحيات هي فتح النموذج أو التقرير وبكلامنا العادي أننا إذا صنعنا جدول يتم تحديثه كلما تم فتح البرنامج ليكون موجود به اسم المستخدم الحالي فقط وكلمة السر الخاصة به مع مستويات الصلاحيات له ، وعند فتح أي نموذج يذهب البرنامج إلى الجدول ثم يختبر خلية الصلاحية فإذا كانت بنعم ( أو 1) يفتح النموذج وإذا كانت ( لا أو 2) يغلق النموذج مع رسالة بها اسم المستخدم الحالي تقوله له ليس من حقك فتح هذه الشاشة .

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

وفي مثال أخونا أبو عقيل كانت الأدوات كالتالي مع أشكال توضح خصائص الحقول

أ- الجداول

1- جدول المستخدمين ( tb5) وهو الذي سيحتوي على معلومات جميع المستخدمين ويحتوي على

* حقل Name لاسم المستخدم مفتاح يمنع تكرار أسماء المستخدمين

tab01.jpg

* حقل rmz لرمز المستخدم والغرض الأساسي منه تمييز المدير أو مالك البرنامج بالرمز ( mas ) ليتم تمييزه عن غيره من المستخدمين وهذا التمييز هو الذي سيستخدم لاحقاً في فتح نموذج الصلاحيات نفسه وهو حقل لا يسمح بالتكرار حتى يكون المسئول واحد فقط .

tab02.jpg

* حقل password وهو الخاص بالرمز السري للمستخدم أو الرقم السري وقناع الإدخال يكون password ليكون نجوم ولا يسمح بالتكرار .

tab03.jpg

*بعد ذلك تأتي حقول المستويات ( levels ) وهذا الحقل عبارة عن قائمة من عمودين عمود يحتوي على صفين بهما القيمين (1 ،2) والعمود الآخر قيمتين مناظرتين ( نعم ولا ) وتم تغيير خصائص هذا الحقل ليظهر كعمود واحد به الأربع قيم أسفل بعضهم ويتم تخزين القيمة 1 أو 2 في الحقل

tab04.jpg

tab04-2.jpg

وسبب الاختيار لخصائص هذا الحقل بهذا الشكل لأنه سيتم إدخال قيم هذا الحقل من نموذج الصلاحيات وستكون القيم الظاهرة في النموذج هي نعم أولا بينما يتم تخزين القيم في الحقل ب 1مناظره لنعم أو 2 مناظره لـ لا

وهكذا حتى المستوى الرابع عشر كما في مثالنا ...

أما البيانات التي ستخزن في هذا الجدول

فهي اسم المستخدم ورمزه ورقمه السري وصلاحياته والتي سنقرنها بنموذج أو أكثر مقابل لكل level بمعنى أننا لو اعتبرنا أن لدينا نموذج form1 سنقرنه بـ level1 فإذا كانت قيمة حقل level1 =1 سنسمح بفتح النموذج أما إذا كانت قيمته 2 سيتم إغلاق النموذج .

الشخص الذي سيوضع رمزه ( حسب مثال أبو عقيل ) = mas هو الذي سيكون له الصلاحيات الكاملة بغض النظر عن اسمه أو كلمة السر الخاصة به . وسنقوم بتغيير جميع مستويات الصلاحية الخاصة به في الجدول إلى الرقم 1

2- جدول fbi وهذا الجدول به نفس الحقول السابقة بحيث أنك تستطيع نسخ الجدول السابق مع تغيير اسمه ثم حذف حقل password منه ولكن أخونا أبو عقيل أضاف حقيلن آخرين وهما date و Time ليستخدمهما في تاريخ وتوقيت الحذف والإضافة والتعديل في البيانات وأعتقد أن هذين الحلقين ليس لهما علاقة مباشرة بموضوع الصلاحيات .

tab05.jpg

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

النماذج والاستعلامات .

=======================

1- نموذج إضافة المستخدمين frm-p2 وهو نموذج بسيط مصدره الجدول tb5 يتكون من حقل name وحقل password وحقل rmz وزر أمر ( ذهاب إلى سجل جديد ) ومكتوب عليه إضافة ...

form01.jpg

وعند إضافة أي مستخدم وبما أن حقل name مفتاح وحقل password لا يتكرر وحقل rmz لا يتكرر بذلك لن يسمح بإدخل مستخدم مرتين مع ملاحظة عند إدخال معلومات المسئول أو المدير يجب أن يأخذ حقل الرمز القيمة mas ( كما في مثالنا ) . وعند إضافة الحقول الثلاثة سيتم إعطاء القيمة 2 لكل مستويات الصلاحية لأنها القيمة الافتراضية . وعندما نريد تغيير هذه القيمة سيكون من نموذج الصلاحيات لاحقاً . .

2- نموذج حذف مستخدم frm-p5

form02.jpg

form03.jpg

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

كما يوجد بالنموذج زر أمر حذف السجل وتم إنشاؤه بواسطة المعالج مع إضافة 3 أسطر من الكود إليه كما بالشكل

form04.jpg

3- نموذج تعديل بيانات مستخدم frm-p5

وهذا النموذج مثل سابقه مصدر السجل فيه عبارة عن جملة sql استعلام تم إنشائه عن طريق منشئ الاستعلامات داخل الخصائص ويتم تحديد السجل الحالي بناءاً على الاسم الذي يتم إدخاله في حقل الاسم في النموذج فعند كتابة اسم مستخدم في حقل الاسم يتم تحديد السجل والذي يتساوى فيه الاسم مع حقل name تمهيداً للتعامل مع هذا السجل مع وضع قيمة الاسم من الجدول في حقل mes المخفي على النموذج وكذلك كلمة السر المناظره للاسم في حقل pasword على النموذج إيضاً

form05.jpg

form06.jpg

في النموذج يوجد حقلين غير منضمين في النموذج وهما name و pas

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

form07.jpg

إذا كان المستخدم ضمن المستخدمين والاسم صحيح سينتقل المؤشر إلى خلية كلمة المرور السابقة والتي اسمها pas وهي حقل غير منضم وبعد كتابة كلمة المرور يتم التأكد من أن كلمة المرور المدخله تساوي كلمة المرور الخاصة بذلك المستخدم فعلاً وإذا لم تساويها يتم اصدار رسالة تفيد ذلك مع إخلاء الحقل والرجوع لنفس الحقل لكتابته من جديد ويتم ذلك بوضع كود في خصائص الحقل pas في حديث بعد التحديث كما بالشكل التالي

form08.jpg

وإذا كانت كلمة المرور صحيحة سيتم إظهار حقل password وهو لتغيير كلمة المرور .

وبما أن الحقل pasword هو من الجدول نفسه فأي تحديث للحقل يتم التحديث في الجدول مباشرة ولكن كيف نحمي هذا الحقل من التحديث المباشر ... ببساطه لن يتم تمكين أو إظهار هذا الحقل أو زر الأمر حفظ إلا إذا كانت كلمة المرور صحيحة والاسم موجود فعلاً ....

وزر الأمر حفظ مهمته إخلاء جميع الحقول مره ثانيه تمهيداً لتعديل مستخدم آخر أو إيذاناً بانتهاء التعديلات المطلوبة .

4- نموذج صلاحيات المستخدمين (( النموذج الأساس )) frm-p6

هذا النموذج هو الذي سنقوم بإعداد الصلاحيات للمستخدمين من خلاله ولكن قبل إعداد هذا النموذج يجب عليك تحديد مستويات الصاحيات أولاً .. بمعنى

لدينا الآن 14 مستوى صلاحيات قابل للزيادة مع التعديل في الاستعلامات ومن الممكن استخدام أي عدد منهم وترك الباقي وفي مثال أبو عقيل استخدم 7 مستويات فقط

مقابل هذه المستويات يجب أن يكون هناك نماذج أو تقارير

أي النموذج رقم واحد مقابل للمستوى واحد ..... فإذا كان للمستخدم القيمة (1) في level1 يقوم البرنامج بالسماح له بفتح النموذج واحد وإذا كانت القيمة 2 لا يسمح له بفتح النموذج

وبالنسبة لمثال أبو عقيل كانت المستويات كالتالي

Level1 ========> نموذج f1 تسجيل موظف جديد

Level2 ========> نموذج f2-3 تعديل معلومات موظف

Level6 ========> نموذج frm-p2 تسجيل مستخدم جديد

Level7 ========> نموذج frm-p5 حذف مستخدم

Level3 ========> نموذج f-rturn إعادة موظف

Level8 ========> نموذج name معلومات المنشأة

Level9 ========> نموذج tar أساسيات البرنامج

ولنرى الآن النموذج frm-p6 ولماذا لم نرى له صلاحية ضمن مستويات الصلاحيات مع أنه محمى ومحجوب عن المستخدمين وممنوح صلاحيته للمدير أو المسئول وهذا ما سنعرفه

form09.jpg

النموذج مصدره جملة sql تم انشائها عن طريق منشئ الاستعلامات داخل خصائص النموذج كما بالشكل السابق وبنفس أسلو ب وطريق عمل النماذج السابقة .... أما مصدر الصف نفسه للحقل user فهو أيضاً جملة sql مبنيه بمنشئ الاستعلامات داخل الخصائص ومهمتها عرض أسماء المستخدمين جميعاً من الجدول ما عدا المستخدم الذي قيمة الحقل rmz له تساوي mas أي عرض جميع المستخدمين ما عدا المسئول فهو دائماً صلاحياته مفتوحه لا ويحتاج لتعديل صلاحيات نفسه ....

form10.jpg

وعند اختيار اسم المستخدم سيتم تحديث حقول levels في النموذج بيانات المستخدم بناءاً على معيار اسم المستخدم نفسه ...مع وضع الكود التالي بعد في حدث بعد التحديث للحقل usre

DoCmd.Requery  'تحديث النموذج لعرض الحقول 
DoCmd.GoToControl "level1"  'الذهاب إلى الحقل الأول

الآن بعد اختيار اسم المستخدم وعرض صلاحياته نستطيع التعديل فيه بتغيير قيم levels من لا إلى نعم والتي ستقوم بتخزين القيم 1 بدلاً من نعم في الجدول والقيمة 2 بدلاً من لا كما أسلفنا في الحديث عن الجداول .

وبعد تعديل الصلاحيات للمستخدم وبالضغط على زر أمر حفظ التغييرات الجديدة للمستخدم يتم الحفظ مع إخلاء حقل user وكذلك تحديث النموذج ليعود كما تم الفتح عليه تمهيداً للتعديل في مستخدم جديد مع وضع الكود التالي في حدث عند الضغط لزر الأمر

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    DoCmd.GoToControl "user"
    Me![user] = Null
    DoCmd.Requery

*************

الآن نصل لأهم نقطه وهى كيفية تعريف الصلاحية للنموذج

يتم إنشاء حقل يوضع على كل نموذج نريد عمل صلاحية له أو أي تقرير نريد عمل صلاحية له وهذا الحقل به دالة

وهنا الصلاحية تنقسم إلا قسمين

الأول == صلاحيات للمسئول فقط

الثاني == صلاحيات للمستخدمين

قلنا من قبل أن لكل نموذج أو تقرير يوجد مستوى صلاحية مناظر له وكل ما علينا هو استحضار قيمة هذا المستوى من جدول fbi وهو الذي تم إلحاق بينات المستخدم الحالي له بحيث نرى هل قيمة هذا المستوى لهذا المستخدم هى 1 أم 2 فغذا كان 1 يتم فنح النموذج أما إذا كانت 2 يتم إغلاق النموذج مع إظهار رسالة تفيد بعدم صلاحية المستخدم لهذا الإجراء ..

أما بالنسبة للمسؤل أوالمدير فيتم البحث عن قيم الحقل emz وليس level لأنه هو الوحيد الذي سيكون رمزه mas أي مسئول وعند فتح النموذج إذا وجدنا أن قيمة هذا الحقل هي mas يفتح النموذج وإلا فليس له صلاحية الفتح أي ليس هو المسئول ..

وفي المثال أو صلاحيات المستخدمين (( النموذج الأساس )) frm-p6

يوجد الحقل rmz وهو غير مرئي للمستخدم ويوجد به الدالة التالية

=DLookUp("[rmz]";"fbi")

وهي الخاصة بإرجاء القيمة للحقل rmz من جدول fbi ووضعها في هذا الحقل ليتم المقارنه بعد ذلك بالكود

وفي حدث عند الفتح للنموذج تم وضع الكود التالي وهو كود الصلاحية في جميع النموذج مع اختلاف طفيف من المسئول إلى المستخدم

Private Sub Form_Open(Cancel As Integer)
If Me![rmz] = "mas" Then   'إذا كان الحقل rmzقيمته تساوي mas
DoCmd.OpenForm "frm-p6"  'افتح النموذج 
Else  ' وإلا 
Beep    'صوت   
Dim zm   'إعلان عن متغير 
zm = DLookup("[user]", "fbi")    'المتغير يساوي اسم المستخدم الحالي 
MsgBox "عفوا يا سيد   " & "( " & zm & " )" & " شاشة الصلاحيات والتحكم من اختصاص المسئول فقط  !!!! ", vbOKOnly, "تحذيـــــــر"
DoCmd.Close    'اغلق النموذج 
End If

End Sub

هذا الكود هو الأساسي وببساطه يقوم مقارنة الحقل rmz في النموذج والذي أخذ قيمته بالدالة السابقة وهل هذه القيمة هي mas أم لا وعلى هذا الأساس يتم فتح النموذج .

أ========

أما النسبة للصلاحية للمستخدمين فنأخذ مثال عليها نموذج tar وبه مستوى الصلاحية level9

form11.jpg

حقل الصلاحية هو الحقل الغير مرئي للمستخدم level9 وبه دالة

=DLookUp("[level9]";"fbi")

وهذه الدالة تقوم بإرجاع القيمة داخل الحقل level9 داخل الجدول fbi

وفي حدث عند الفتح يتم وضع الكود التالي ونلاحظ أنه يختلف عن الكود السابق بدلاً من القيمة rmz نضع القيمة 1

Private Sub Form_Open(Cancel As Integer)
If Me![level9] = 1 Then  '       موضع الاختلاف في القيمة
DoCmd.OpenForm "tar"
DoCmd.GoToControl "no1"
Else
Beep
Dim zm
zm = DLookup("[user]", "fbi")
MsgBox "عفوا يا سيد /  " & "( " & zm & " )" & " ليس لك الحق بالدخول لهذه الشاشة ", vbOKOnly, "تحذيـــــــر"
DoCmd.Close
End If
End Sub

====

بذلك نكون تطرقنا لجوانب الحماية وبقي شاشة الدخول إلى البرنامج

النموذج frm-p1 وهو الخاص بالدخول إلى البرنامج وتسجيل اسم المستخدم وكلمة المرور

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

form12.jpg

عندما يدخل المستخدم اسماً في حقل اسم المستخدم name يتم تحديث الحقل المخفي password ليحتوي على قيمة كلمة المرور المأخوذه من جدول fb5 بناءا على اسم المستخدم ... وللتأكد من وجود المستخدم ضمن المستخدمين من عدمه يوضع الكود التالي في حدث بعد التحديث للحقل name مع إظهار رسالة تفيد عدم وجود المستخدم ضمن المستخدمين المعتمدين

Private Sub name_AfterUpdate()
DoCmd.Requery
If (Eval("[Forms]![frm-p1]![pasword] Is Null")) Then
Beep
MsgBox "åÐÇ ÇáãÓÊÎÏã ÛíÑ ãæÌæÏ Öãä ÇáãÓÊÎÏãíä ÇáãÚÊãÏíä ÈÇáÍÇÓÈ..  ÊÃßÏ ãä ÇÓã ÇáãÓÊÎÏã ÃæáÇ !!!", vbInformation, "ÑÓÇáÉ ÊÍÐíÑíÉ"
DoCmd.GoToControl "name"
Me![name] = Null
 End If
  If (Eval("[Forms]![frm-p1]![pasword] Is Not Null")) Then
  DoCmd.GoToControl "zm"
  End If
End Sub

وعند وجود المستخدم فعلاً يتم نقل المؤشر إلى خانة كلمة المرور الحقل zm لكتابة كلمة المرور وبعد تحديث هذا الحقل يتم تشغيل الكود التالي ليتأكد البرنامج أن كلمة المرور التي كتبها المستخدم مطابقة لتلك المخزنة له في الجدول tb5 والكود التالي يوضع في حدث بعد التحديث للحق zm

For r = 1 To 3
x = Me![pasword]
If Me.zm = "12369874" Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "q4", acNormal, acEdit   ' هذا الاستعلام غير موجود في المثال
DoCmd.SetWarnings True
DoCmd.Close
End
End If
If Me.zm = x Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "q6", acNormal, acEdit ' استعلام إلحاق بيانات المستخدم الحالي بالجدول fbi
DoCmd.SetWarnings True
DoCmd.Close
'docmd.OpenForm " "
End
Else
Beep
MsgBox "كلمة المرور خاطئة ... حاول مرة أخرى", 48, ""محاولة أخرى
End
End If
Next r
MsgBox "لا محاولات أخرى فضلاً اتصل على المبرمج على الرقم 55555555  !", 48, ""خروج نهائي من البرنامج
DoCmd.Quit
End Sub

ولي ملاحظة على هذا الكود أولاً القسم الأول منه يختبر الحقل zm فإذا ساوى الرقم 12369874 يتم تشغيل استعلام q4 وهذا الاستعلام أساساً غير موجود في المثال وأتوقع انه يقوم بحذف جميع المستخدمين من الجدول tb5 بما فيهم المدير أو المسئول حتى يتسنى للمبرمج إضافة مسؤول جديد وكلمة مرور جديدة له ... وهذا يحدث عند تحميل البرنامج لأول مره مثلاً .. وهذه الملاحظة مجرد استنتاج فكما تعلمون لست أنا من صنع المثال ..

والجزء الثاني من الكود يقوم باختبار نفس الحقل zm فإذا وجده يساوي الحقل password طبعاً بالإعلان عن متغيرات مع عد لعدد المحاولات وإذا وجد القيمين متطابقين يدخل البرنامج وإلا يخرج من البرنامج بعد عدد معين من المحاولات

form13.jpg

أما الاستعلام الوحيد الخارجي الذي استخدمه أبو عقيل في الصلاحيات فهو الاستعلام q6 وهو استعلام تحديث يقوم بأخذ قيم سجل المستخدم الحالي بعد أن أدخل اسمه وكلمة مروره الصحيحه ويحدث بها بيانات الجدول fbi ليكون هذا الجدول دائماً هو جدول المستخدم الحالي .

ملاحظات :

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

هذا كل شيء

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

مع تحياتي

أخوكم رضا عقيل

#25

السلام عليكم

هذا مثال بالأكسيس 2000 على تحديد المستخدمين والصلاحيات لهم ...

الأسماء الموجودة هي :

1- محمد = كلمة المرور = 1

2- علي = كلمة المرور = 2

بالأمكان إضافة أو تعديل بيانات المستخدمين ..

أرجوا من الأخوان أبداء الملاحظات ... والسلام عليكم

مëçل_ُلçييçê_çلمَêîïمين_2.zip

mk17481_26bccea871.gif

هذا الموضوع مغلق.

مواضيع مشابهة