ديموفنف توفر لك نظام متطور للصلاحيات ، حيث تعتمد ديموفنف علي نظام الـ بيتفيلد (BitField) ، ، هناك نقاط أساسية يجب فهمها عن نظام صلاحيات البيتفيلد :
- الـ Bit هو أصغر وحدة بيانات في التقنية الرقمية ، حيث يمكن أن يحتوي علي قيمتين فقط (2) ، يتم تقديم هذه القيم علي هيئة أرقام ثنائية (Binary) ، وهي 0 و 1 .
- قيم البيتفيلد للصلاحيات يتم تعيينها تصاعدياً و بالترتيب بإستخدم طريقة أس 2 ، حيث أن رقم 2 هو أقصي قيمة يمكن أن يحتويها البت :
20 = 1
21 = 2
22 = 4
23 = 8
24 = 16
25 = 32
26 = 64
..
..
..
2n = ..
ملاحظة :
في ديموفنف يتم تقسيم الصلاحيات إلي مجموعات ، حيث يجب أن تكون قيم البيتفيلد لكل صلاحية داخل المجموعة مظبوطة و بترتيب تصاعدي مظبوط ، حتي تتم معادلة مقارنة الصلاحية بشكل صحيح ، حيث أن نظام البيتفيلد يقوم بمقارنة الرقم الثنائي لرقم البيتفيلد للصلاحية بإستخدام معامل & الفردي ، و الرقم الثنائي لإجمالي مجموع أرقام البيتفيلد للمجموعة التي تندرج منها الصلاحية ، بحيث أن تعطي بالنهاية رقم ثنائي لأحدي قيم البيتفيلد لصلاحية من الصلاحيات الموجوده ضمن المجموعة ، و بالتالي ترجع قيمة true مما يحقق شرط الصلاحية ، أما إن أعطت رقم ثنائي ليس موجود ضمن قيم الأرقام الثنائيه لصلاحية من الصلاحيات الموجوده ضمن المجموعة ، فترجع false ولا يتحقق الشرط .
مثال :في حال كان لدينا مجموعة بإسم صلاحيات المشاهدة ، و تحتوي بداخلها علي عدة صلاحيات إجمالي قيم البيتفيلد لها هو 15 ، و نريد التأكد من صلاحية من ضمن المجموعة و لتكن صلاحية مشاهدة المحتوي ، و التي يكون ترتيبها في المجموعة هو رقم 4 ، و بالتالي قيمة البيتفيلد لها طبقاً للترتيب التصاعدي سوف تكون 8 ، إذن معادلة حسابها تتم بشكل مماثل لهذا :
- الرقم الثنائي لإجمالي مجموع قيم البيتفيلد للمجموعة (15) هو 1111
- الرقم الثنائي لقيمة البيتفيلد للصلاحية المطلوبة (8) هو 1000
معادلة المقارنة بإستخدام معامل & الفردي تتم هكذا :
1111
1000 &
----
1000
حيث عند المقارنة ، يجب أن يتحقق الشرط في الطرفين للمعامل AND ، حيث أن نتيجة المعادلة كالتالي (من اليمين لليسار) :
- 1 و 0 (لم يتحقق الشرط) = 0
- 1 و 0 (لم يتحقق الشرط) = 0
- 1 و 0 (لم يتحقق الشرط) = 0
- 1 و 1 (تحقق الشرط) = 1
و بالتالي يصبح المجموع في الأخر هو 1000 ، و الذي يعادل رقم 8 في البيتفيلد ، و الذي هو إحدي قيم البيتفيلد داخل مجموعة الصلاحيات ، و بالتالي يرجع true ، نقدم لك في ديموفنف دوال جاهزة لتنفيذ عملية المقارنة هذه ، سيتم سردها لاحقاً.
- يتم تخزين الصلاحيات و قيم البيتفيلد لها في ملف xml ، حيث في ديموفنف ملف البيتفيلد موجود علي المسار include/xml بإسم dimofinf-bitfield.xml ، أما في البلجنات فهو يتواجد (إن وجد) داخل مجلد xml علي المسار التالي include/plugins/pluginfolder/xml/pluginfolder-bitfield.xml مع إستبدال pluginfolder بإسم مجلد البلجن. (هام : يجب أن يتم حفظ ملف البيتفيلد بنفس صياغ هذا الإسم في البلجنات)
مثال لملف الـXML للبيتفيلد :
[code] The permissions groups starts here from 1 2 [/code] /p>
ملاحظات :
- يتم تقسيم الصلاحيات إلي مجموعات ، كل مجموعة تحتوي الصلاحيات الخاصه بها.
- يتم إستبدال module بـ إسم الموديول أو البلجن.
-الخاصية name في الوسم bitfield هو إسم الصلاحية.
-الخاصية phrase في الوسم bitfield هو إسم متغير العبارة في اللغة للصلاحية.
-الخاصية readonly في الوسمbitfield هو الخاص بأرقام مجموعات الأعضاء الذي سيسمح فيها بالصلاحية إجبارياً دون التخيير بين السماح بها أو لا.
-الخاصية install في الوسمbitfield هو الخاص بأرقام مجموعات الأعضاء الذي سيسمح فيها بالصلاحية إفتراضياً.
-يجب أن يحتوي ملف البيتفيلد للبلجن إفتراضياً علي المجموعة و الصلاحية التالية:
[code] 1 [/code]
حيث أن هذه الصلاحية تتيح إفتراضياً لجروبات الأعضاء رقم 9 و 10 الخاصة بالإداريين بالتحكم في إعدادات هذا البلجن من خلال لوحة تحكم DimCP بعد تنصيبه ، كما يمكنك إضافة باقي صلاحياتك إلي هذه المجموعة ، لا تنسي تغيير pluginfolder إلي إسم مجلد البلجن.
دوال تأكيد الصلاحيات :
PHP :
تقوم هذه الدالة بالتأكد من الصلاحية للعضو أو الزائر الحالي و تقوم بإرجاع true في حال كان مسموح بالصلاحية و false في العكس ، كما أنه يمكن إرسال رقم الـ id لعضو معين للتأكد من الصلاحية له.
البارميترز :
- module$ (إجباري) : أسم الموديول أو البلجن وهي بمثابة المجموعة التي تندرج منها الصلاحية.
- perm$ (إجباري) : اسم الصلاحية التي تريد التأكد منها.
- ugp_sperm$ (إختياري) : صلاحيات البيتفيلد للصلاحيات الخاصة ، حيث يوجد في ديموفنف نوعين من
الصلاحيات، أولاً صلاحيات مجموعات الأعضاء و هذه هي الإفتراضية ، و ثانياً الصلاحيات الخاصة للأقسام،
و هذه عند تعيينها فإنها تضغي علي صلاحيات مجموعة العضو و من ثم تتعامل الدالة مع البيتفيلد الخاص بها فقط فيما يخص الصلاحيات الخاصة بالأقسام.
- userid$ (إختياري) : في حال تعيين رقم الـ Id لعضو ، عندئذ تقوم الدالة بتأكيد الصلاحيات لهذا العضو وفقاً لمجموعة الأعضاء المنتمي لها ، أما عند عدم تعيينها ، فتقوم الدالة بتأكيد الصلاحية وفقاً للعضو أو الزائر الحالي.
مثال :
PHP :
هذه الدالة هي دالة مساعدة فائدتها هي إستخدامها و دمجها في إستعلامات الـ SQL حيث أنها تقوم بإرجاع String مفصول بفاصلة ,للأقسام التي للعضو أو الزائر الحالي له عليها صلاحية ، بالتوافق كذلك مع الصلاحيات الخاصة للأقسام ، مع ملاحظة أنه يمكن إرجاع جزأ إستعلام SQL عند تعيين المتغير customcase$ مباشرة للأقسام / المحتويات التي للعضو/الزائر الحالي عليه صلاحية لمشاهدتها و مشاهدة محتوياته أو محتويات الغير/ نشر محتوياته / نشر محتويات الغير.
البارميترز :
- module$ (إجباري) : أسم الموديول أو البلجن وهي بمثابة المجموعة التي تندرج منها الصلاحية.
- forwhat$ (إختياري) : مصفوفة بأسماء الصلاحيات التي تريد التأكد منها.
- customcase$ (إختياري) : مصفوفة في حال تعيينها فأنها تلغي إرجاع String مفصول بفاصلة،
للأقسام التي للعضو أو الزائر الحالي له عليها صلاحية ، و تقوم بإرجاع جزأ إستعلام SQL فائدته التحقق
من الأقسام التي للعضو / الزائر صلاحيات المشاهدة لمحتويات و لمحتويات الأخرين عليها و بالتالي تعرض
فقط المحتويات التي له صلاحيات المشاهدة سواء لمحتوياته أو محتويات الغير / نشر محتوياته / نشر
محتويات الغير .
هذه المصفوفة يجب أن تحتوي إفتراضياً على:
- secid : رقم الـ Id للقسم.
- tblname : إسم جدول المحتويات في قاعدة البيانات.
مثال :
PHP :