ربط بيرم لأكثر من نوع محتوى واحد
-
26-09-2019 - |
سؤال
دروبال 6.x
لدي هذه الوحدة التي تدير أربعة أنواع مختلفة من المحتوى. لهذه المسألة ، كيف يمكنني تحديد إذن لكل محتوى داخل نفس الوحدة؟ هل هذا ممكن؟ لا يمكنني معرفة كيفية تحديد الإذن لكل نوع محتوى يجب تسمية Cuz Hook_perm باسم الوحدة ولا يحتوي على أي وسيطة (مثل Hook_Access $ Node) لإرجاع قاعدة إذن على نوع المحتوى. إليك كيف أود أن أفعل -
function mymodule_perm()
{
if(content1)
return array(
'create content1 node',
'edit content1 nodes',
'delete content1 nodes',
);
if(content2)
return array(
'create content2 node',
'edit content2 nodes',
'delete content2 nodes',
);
if(content3)
return array(
'create content3 node',
'edit content3 nodes',
'delete content3 nodes',
);
.......
}
أي مساعدة سيكون موضع تقدير كبير.
المحلول
عادة لا تحتاج إلى إنشاء أذونات لأنواع المحتوى بنفسك ، كما تفعل وحدة العقدة هذا من أجلك node_perm()
. لكل نوع محتوى تعلن فيه hook_node_info()
, ، ستقوم وحدة العقدة تلقائيًا بإنشاء مجموعة ثابتة من الأذونات على النحو التالي:
$perms[] = 'create '. $name .' content';
$perms[] = 'delete own '. $name .' content';
$perms[] = 'delete any '. $name .' content';
$perms[] = 'edit own '. $name .' content';
$perms[] = 'edit any '. $name .' content';
إلى جانب ذلك ، يمكنك إعلان أي عدد من الأذونات الإضافية في وحداتك hook_perm()
التنفيذ (طالما أنها فريدة من نوعها) واستخدم تلك الموجودة في الكود الخاص بك كما تريد.
الشيء المهم هنا هو أن الإذن لا يفعل الكثير من تلقاء نفسه - إنه مجرد اسم سيظهر على صفحة الأذونات ، مما يسمح له بمناسبة الأدوار. أنها تصبح فقط "ذات معنى" بواسطة الكود الذي يستخدمها عبر user_access()
المكالمات.
لذا ، على سبيل المثال ، إذا أردت إنشاء إذن خاص وجديد لكل نوع من أنواع المحتوى بنفسك ، فستعلنهم فقط hook_perm()
مرة واحدة (لذلك لا تحتاج إلى أي وسيطة - ما عليك سوى إرجاع سلسلة واحدة لكل إذن تريد إنشاؤها).
نصائح أخرى
بشكل عام ، ستعود وحدة تنفيذ أكثر من نوع محتوى واحد إلى إرجاع جميع الأذونات التي تحددها hook_perm()
; ؛ لا توجد طريقة لمعرفة نوع المحتوى الذي يسأل Drupal عن الأذونات المنفذة.
يطلب دروبال دائمًا الوحدات النمطية لقائمة جميع الأذونات المنفذة ، والتي لا يمكن أن تكون مرتبطة بالعقد ؛ هناك بعض الوحدات النمطية التي تنفذ أذونات فقط لصفحات الإعداد الخاصة بهم ، على سبيل المثال.