it-swarm.asia

كيفية تعيين أذونات للأدوار برمجيا؟

لدي بعض الأذونات التي أرغب في تعيينها لبعض الأدوار برمجياً لتسهيل التثبيت.

لأنني أقوم بتثبيت الوحدة النمطية وإنشاء كل من الأذونات والأدوار ، ليس لدي معرف الدور ، حيث أرغب في تعيين الأذونات. حتى الآن لم أجد سوى طرق تعيين الأدوار برمجيًا التي تحتاج إلى معرف الدور.

أتساءل عما إذا كان بإمكاني بطريقة ما البحث عن الأدوار باسمها (سلسلة) ، واسترداد معرف الدور ثم تعيين الإذن. إنه لا يبدو صحيحًا.

25
vogelsang

تقوم وحدة الميزات بذلك بشكل جيد ، مما يسمح لك بتصدير الأدوار والأذونات (والكثير من الأشياء الأخرى) في ضربة واحدة:

http://drupal.org/project/features

ولكن إذا كنت ترغب في بدء التحقق من واجهة برمجة تطبيقات الأذونات:

http://drupal.org/project/permissions_api

1
krlucas

الميزات مفيدة جدًا لأشياء مثل هذه. ومع ذلك ، إذا كنت بحاجة إلى إنشاء أدوار وإضافة أذونات برمجيًا ، فلن تضطر إلى البحث في قاعدة البيانات بنفسك.

عند إنشاء دور مستخدم جديد باستخدام user_role_save() ، سيتم تحديث الكائن الذي أدخلته بمعرف دور المستخدم الجديد الذي تم تعيينه. يمكنك مشاهدة مثال على ذلك في الوظيفة standard_install() في ملف تعريف التثبيت القياسي.

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

يوضح هذا المثال أنه يمكنك إنشاء دور مستخدم جديد ، ثم الوصول إلى خاصية rid ، التي تم ملؤها بواسطة user_role_save(). كما يوضح كيفية إضافة أذونات لهذا الدور باستخدام user_role_grant_permissions(). في هذه الحالة ، يمنح دور "المسؤول" جميع الأذونات المتاحة.

إذا كنت بحاجة إلى الحصول على معرف دور مستخدم أنشأه شخص آخر ، فيمكنك استخدام user_role_load_by_name() للحصول على الكائن لدور المستخدم هذا. ثم تحصل على المعرّف باستخدام $role->rid.

25
Chaulky

أود أن أضيف مثالاً رمزياً أقرب إلى السؤال الأصلي حول كيفية تعيين الأذونات للأدوار الحالية برمجيًا.

يمكنك البحث عن الأدوار باسمها ، واسترداد معرف الدور ثم تعيين الأذونات على النحو التالي (على سبيل المثال في تطبيق hook_update):

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
20
batigolix