سؤال

دروبال 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 عن الأذونات المنفذة.
يطلب دروبال دائمًا الوحدات النمطية لقائمة جميع الأذونات المنفذة ، والتي لا يمكن أن تكون مرتبطة بالعقد ؛ هناك بعض الوحدات النمطية التي تنفذ أذونات فقط لصفحات الإعداد الخاصة بهم ، على سبيل المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top