مكتبة الشروحات



 تصنيفات المكتبة





 جوال ديموفنف


اشترك الآن في موبايل ديموفنف واستمتع بعالم جديد من الخدمات المتميزة وبسعر رمزي تصلك رسائلنا على موبايلك أينما كنت . تفاصيل


 محول العملات


  • العملة
  • المبلغ بالدولار

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



ديموفنف توفر لك نظام متطور للصلاحيات ، حيث تعتمد ديموفنف علي نظام الـ بيتفيلد (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 :
<?xml version="1.0" encoding="UTF-8"?>
<bitfields product="dimofinf">
	<bitfields>
		<group name="ugp">
			
The permissions groups starts here from
			<group name="modulepermissions">				
				<bitfield name="cvcontent"	group="module_permissions" 	phrase="c_v_c"	readonly="10"	install="1,2,3,4,5,6,7,8,9,10">1</bitfield>
				<bitfield name="cvothcontent"	group="module_permissions" 	phrase="c_v_oth_c"  readonly="10"	install="1,2,3,4,5,6,7,8,9,10">2</bitfield>
			</group>
			
		</group>
	</bitfields>
</bitfields>
/p>

ملاحظات :

  • يتم تقسيم الصلاحيات إلي مجموعات ، كل مجموعة تحتوي الصلاحيات الخاصه بها.
  • يتم إستبدال module بـ إسم الموديول أو البلجن.
  • الخاصية name في الوسم  bitfield هو إسم الصلاحية.
  • الخاصية phrase في الوسم bitfield  هو إسم متغير العبارة في اللغة للصلاحية.
  • الخاصية readonly  في الوسمbitfield  هو الخاص بأرقام مجموعات الأعضاء الذي سيسمح فيها بالصلاحية إجبارياً دون التخيير بين السماح بها أو لا.
  • الخاصية install في الوسمbitfield  هو الخاص بأرقام مجموعات الأعضاء الذي سيسمح فيها بالصلاحية إفتراضياً.

يجب أن يحتوي ملف البيتفيلد للبلجن إفتراضياً علي المجموعة و الصلاحية التالية

CODE :
<group name="pluginfolderpermissions">
				<bitfield name="cctrlsettings"	group="pluginfolder_permissions" 	phrase="c_ctrl"	 readonly="10"	install="9,10">1</bitfield>
</group>

حيث أن هذه الصلاحية تتيح إفتراضياً لجروبات الأعضاء رقم 9 و 10 الخاصة بالإداريين بالتحكم في إعدادات هذا البلجن من خلال لوحة تحكم DimCP بعد تنصيبه ، كما يمكنك إضافة باقي صلاحياتك إلي هذه المجموعة ، لا تنسي تغيير pluginfolder إلي إسم مجلد البلجن.

دوال تأكيد الصلاحيات :

 

PHP :
{* php buffer start *} is_permissioned_to($module$perm$ugp_sperm false,$userid false
{* php buffer end *}

تقوم هذه الدالة بالتأكد من الصلاحية للعضو أو الزائر الحالي و تقوم بإرجاع true في حال كان مسموح بالصلاحية و false في العكس ، كما أنه يمكن إرسال رقم الـ id لعضو معين للتأكد من الصلاحية له.

 

البارميترز :

      -  
module$ (إجباري) : أسم الموديول أو البلجن وهي بمثابة المجموعة التي تندرج منها الصلاحية.
      -  perm$ (إجباري) : اسم الصلاحية التي تريد التأكد منها.
      -  ugp_sperm$ (إختياري) : صلاحيات البيتفيلد للصلاحيات الخاصة ، حيث يوجد في ديموفنف نوعين من
             الصلاحيات، أولاً صلاحيات مجموعات الأعضاء و هذه هي الإفتراضية ، و ثانياً الصلاحيات الخاصة للأقسام،
             و هذه عند تعيينها فإنها تضغي علي صلاحيات مجموعة العضو و من ثم تتعامل الدالة مع البيتفيلد الخاص بها
             فقط فيما يخص الصلاحيات الخاصة بالأقسام.
      -  userid$ (إختياري) : في حال تعيين رقم الـ Id لعضو ، عندئذ تقوم الدالة بتأكيد الصلاحيات لهذا العضو وفقاً
             لمجموعة الأعضاء المنتمي لها ، أما عند عدم تعيينها ، فتقوم الدالة بتأكيد الصلاحية وفقاً للعضو أو الزائر الحالي. 

مثال :

PHP :
{* php buffer start *} define('THIS_PRODUCT''article');
define('THIS_SCRIPT''articles');
<
em>//</em><em>returning the section permissions
</em>$ugp_spermc $dimofinf->modulesections[THIS_SCRIPT]
[
$dimofinf->GPC['id']]['special_perm'];
if(
is_permissioned_to(THIS_PRODUCT'cvcontent'$ugp_spermc))
{
$allow_view_own 1;
}
if(
is_permissioned_to(THIS_PRODUCT'cvothcontent'$ugp_spermc))
{
$allow_view_other 1;
}
if(
is_permissioned_to(THIS_PRODUCT'cacontent'$ugp_spermc))
}
if(
is_permissioned_to(THIS_PRODUCT'cpcontent'$ugp_spermc))
$allow_publish 1;
}
if (
is_permissioned_to(THIS_PRODUCT'cpocontent'$ugp_spermc))
{
$allow_publish_other 1;
}

whatipermissionedTo($module,$forwhat false,$customcase=false
{* php buffer end *}


هذه الدالة هي دالة مساعدة فائدتها هي إستخدامها و دمجها في إستعلامات الـ SQL حيث أنها تقوم بإرجاع String مفصول بفاصلة  ,للأقسام التي للعضو أو الزائر الحالي له عليها صلاحية ، بالتوافق كذلك مع الصلاحيات الخاصة للأقسام ، مع ملاحظة أنه يمكن إرجاع جزأ إستعلام SQL عند تعيين المتغير customcase$ مباشرة للأقسام / المحتويات التي للعضو/الزائر الحالي عليه صلاحية لمشاهدتها و مشاهدة محتوياته أو محتويات الغير/ نشر محتوياته / نشر محتويات الغير.

 البارميترز :

      -  
module$ (إجباري) : أسم الموديول أو البلجن وهي بمثابة المجموعة التي تندرج منها الصلاحية.
      -  forwhat$ (إختياري) : مصفوفة بأسماء الصلاحيات التي تريد التأكد منها.
      -  customcase$ (إختياري) : مصفوفة في حال تعيينها فأنها تلغي إرجاع String  مفصول بفاصلة، 
             للأقسام التي  للعضو أو الزائر الحالي له عليها صلاحية ، و تقوم بإرجاع جزأ إستعلام SQL فائدته التحقق
             من الأقسام التي للعضو / الزائر صلاحيات المشاهدة لمحتويات و لمحتويات الأخرين عليها و بالتالي تعرض
             فقط المحتويات التي له صلاحيات المشاهدة سواء لمحتوياته أو محتويات الغير / نشر محتوياته / نشر
             محتويات الغير . 

هذه المصفوفة يجب أن تحتوي إفتراضياً على:

- secid : رقم الـ Id للقسم.

- tblname : إسم جدول المحتويات في قاعدة البيانات.

مثال :

PHP :
{* php buffer start *} define('THIS_PRODUCT''article');
define('THIS_MODULE''articlesm');
$SQL "SELECT COUNT(*) AS total FROM " . TABLE_PREFIX . "articlesm 
WHERE article_id =" . 
$dimofinf->GPC['id']
. " AND " . whatipermissionedTo( THIS_PRODUCT, false,
array( 'secid' => 
$dimofinf->GPC['id'], 'tblname' => THIS_MODULE  ) );
$count = $dimofinf->db->query_first_slave($SQL); 
{* php buffer end *}


هل كانت المقالة مفيدة ؟

أضفة للمفضلة أضفة للمفضلة    طباعة طباعة


Online