user_access (سلسلة $ ، $ account = NULL)
سلسلة $: الإذن ، مثل "إدارة العقد" ، يتم التحقق منه.
كيف يمكنني العثور على قائمة بقيم السلسلة $ المتاحة للدالة user_access()
؟
طالما أن كل وحدة يمكن أن تحدد أذوناتها الخاصة ، لا توجد قائمة "صارمة" لتلك السلسلة. ستحتاج إلى "إنشاءها" إذا كنت تحتاج حقًا إلى الحصول على مثل هذه القائمة برمجيًا.
يمكنك تشغيل هذا البرنامج النصي في صفحة/devel/php. (بالطبع تحتاج --- Devel module.)
// Render role/permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
print_r($module);
// Drupal 6
// if ($permissions = module_invoke($module, 'perm')) {
// print_r($permissions);
// }
// Drupal 7
if ($permissions = module_invoke($module, 'permission')) {
print_r($permissions);
}
}
كما قالBerdir ، فإن أسهل طريقة لمعرفة الأذونات المتاحة هي الانتقال إلى مسؤول الأذونات/الأشخاص/الأذونات في Drupal 7.
المشكلة التي ظللت أواجهها هي أنني لم أتمكن أبدًا من معرفة السلسلة التي أحتاج إلى توفيرها كـ "وسيطة وصول" لاستخدام الإذن بالفعل. حسنًا ، إليك كيفية العثور على اسم السلسلة للأذونات التي تريد استخدامها (يستخدم هذا المثال Google Chrome.)
الخطوةالاولى. انتقل إلى المسؤول/الأشخاص/الأذونات للعثور على الإذن الذي ترغب في استخدامه وانقر بزر الماوس الأيمن على مربع الاختيار الموجود على يسار الإذن الذي ترغب في استخدامه. حدد "فحص العنصر" أو مجرد إلقاء نظرة على المصدر.
ابحث بعد ذلك عن قيمة خانة الاختيار ولاحظ القيمة. (في هذه الحالة السلسلة هي "إنشاء محتوى قسيمة")
هذه هي السلسلة التي تحتاج إلى توفيرها كوسيطة وصول في hook_men ()
رمز المثال: (تمت إزالة العناصر غير ذات الصلة ، ولا تنسَ العنوان ، ورد الاتصال ، وما إلى ذلك في hook_men ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
في ما يلي نسخة D7 من إجابة هزاع ، معدلة لاستخدام DSM بدلاً من print_r واستبعاد الوحدات التي لا تنفذ hook_permission:
// Render permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
if ($permissions = module_invoke($module, 'permission')) {
// List only the modules that have permissions.
dsm($module);
dsm($permissions);
}
}
يمكنك استخدام الدالة user_permission_get_modules()
، التي تُرجع مصفوفة من كافة الأذونات المحددة ووحداتها.
حدد الوحدات التي تنتمي إليها الأذونات.
قيمة الإرجاع
صفيف ترابط في التنسيق $ إذن => وحدة نمطية.
أسهل طريقة هي التحقق من صفحة الأذونات (D7: admin/people/الأذونات ، D6: admin/user/الأذونات). لاحظ أنك تستخدم السلسلة المعروضة مباشرةً في Drupal 6 ، أما الرقم 7 فيحتاج إلى إلقاء نظرة على اسم/قيمة مربع الاختيار. وذلك لأن الأذونات تحتوي الآن على عنوان ووصف مترجم في Drupal 7.
لذا إذا كنت تريد اسم الإذن "عرض المحتوى المنشور" في Drupal 7 ، فإن القيمة هي "الوصول إلى المحتوى" وهو اسم الإذن الخاص بك.
إذا كنت تعرف الوحدة النمطية التي يأتي الإذن منها ، فيمكنك أيضًا التحقق من تنفيذ hook_perm () (D6)/ hook_pemission () (D7) لتلك الوحدة.
في كثير من الحالات ، ترغب في تحديد دفعاتك الخاصة واستخدامها ، يمكنك القيام بذلك باستخدام الخطافات أعلاه.
استخدام وحدة Devel
بعد تثبيت وتمكين Devel الوحدة النمطية ، انتقل إلى admin/config/development/devel
. هناك إعداد بعنوان "عرض أسماء الأجهزة للأذونات والوحدات". تأكد من التحقق من ذلك.
الآن على صفحة الأذونات في people/permissions
، مرر فوق اسم الإذن الذي تستجوبه. قد يؤخر ثانية أو اثنتين ، ولكن بعد ذلك ستظهر قيمة السلسلة.
لقد أنشأت مقتطف جافا سكريبت الذي يساعدني في ذلك. لقد اختبرته في Drupal 7 فقط على موضوع لامع .
يقوم بشكل أساسي بإخراج اسم الجهاز ، المأخوذ من مربع الاختيار الأول على هذا الاسم ، إلى الخلية الأولى ، تحت التسمية. يعتمد البرنامج النصي على jQuery ، والذي لا ينبغي أن يكون مشكلة في Drupal 7.
عادة ما ألصقها على وحدة تحكم أدوات المطور وأقوم بتشغيلها من هناك. يمكنني إنشاء كتيب مرجعي لها في المستقبل.
// Go through each of the rows on the permissin table
rows = jQuery('#permissions tr');
rows.each(function() {
// Get the first checkbox in the row.
checkbox = jQuery('.checkbox .form-checkbox', this).first();
// Get the first cell, containing the permission label.
nameCell = jQuery('td:first-child', this);
// In case this is not a permission row
if(checkbox.length == 0) {
return;
}
// Embed the permission maching name on permission label cell.
nameCell.append("<div><code>" + checkbox.val() + "</code></div>");
});
فيما يلي تغيير نموذج بسيط سيضيف مفتاح الإذن للاسم في صفحة الأذونات. من المفترض أن يسهل ذلك البحث عنه. ستحتاج إلى إضافتها إلى وحدة مخصصة واستبدال "mymodule" باسم تلك الوحدة.
/**
* Implements hook_form_FORM_ID_alter().
*/
function mymodule_form_user_admin_permissions_alter(&$form, $form_state) {
foreach ($form['permission'] as $key => &$item) {
if (isset($item['#type']) && $item['#type'] == 'item') {
$item['#markup'] .= ' (' . $key . ')';
}
}
}
هذه وحدة بسيطة لتسهيل الأمر: قائمة وسيطات الوصول
مع تحياتي
db_query("SELECT DISTINCT {permission} FROM role_permission");
فقط ضع بعض الوحدات ، سترى أذونات الجهاز على / admin/people/الأذونات
function YOURMODULE_form_user_admin_permissions_alter(&$form, &$form_state)
{
$perms = &$form['permission'];
$group_counter = 0;
foreach ($perms as $k => &$v) {
if ($k == $group_counter) { // skip fieldsets
$group_counter++;
continue;
}
$v['#markup'] .= ' (<span class="description" style="color:brown">'.$k.'</span>)';
}
}
مع تحياتي