نظام الصلاحيات

ديموفنف توفر لك نظام متطور للصلاحيات ، حيث تعتمد ديموفنف علي نظام الـ بيتفيلد (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 :

هل كانت المقالة مفيدة ؟ 13 أعضاء وجدوا هذه المقالة مفيدة (13 التصويتات)