it-swarm.asia

كيف يمكنني العثور على قائمة بقيم السلسلة $ المتاحة لوظيفة user_access ($ string)؟

user_access (سلسلة $ ، $ account = NULL)

سلسلة $: الإذن ، مثل "إدارة العقد" ، يتم التحقق منه.

كيف يمكنني العثور على قائمة بقيم السلسلة $ المتاحة للدالة user_access()؟

27
gilzero

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

يمكنك تشغيل هذا البرنامج النصي في صفحة/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);
  }
}
12
Haza

كما قالBerdir ، فإن أسهل طريقة لمعرفة الأذونات المتاحة هي الانتقال إلى مسؤول الأذونات/الأشخاص/الأذونات في Drupal 7.

المشكلة التي ظللت أواجهها هي أنني لم أتمكن أبدًا من معرفة السلسلة التي أحتاج إلى توفيرها كـ "وسيطة وصول" لاستخدام الإذن بالفعل. حسنًا ، إليك كيفية العثور على اسم السلسلة للأذونات التي تريد استخدامها (يستخدم هذا المثال Google Chrome.)

الخطوةالاولى. انتقل إلى المسؤول/الأشخاص/الأذونات للعثور على الإذن الذي ترغب في استخدامه وانقر بزر الماوس الأيمن على مربع الاختيار الموجود على يسار الإذن الذي ترغب في استخدامه. حدد "فحص العنصر" أو مجرد إلقاء نظرة على المصدر.

Example

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

enter image description here

هذه هي السلسلة التي تحتاج إلى توفيرها كوسيطة وصول في 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;
}
26
Citricguy

في ما يلي نسخة 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);
  }
}
9
fureigh

يمكنك استخدام الدالة user_permission_get_modules() ، التي تُرجع مصفوفة من كافة الأذونات المحددة ووحداتها.

حدد الوحدات التي تنتمي إليها الأذونات.

قيمة الإرجاع

صفيف ترابط في التنسيق $ إذن => وحدة نمطية.

6
Елин Й.

أسهل طريقة هي التحقق من صفحة الأذونات (D7: admin/people/الأذونات ، D6: admin/user/الأذونات). لاحظ أنك تستخدم السلسلة المعروضة مباشرةً في Drupal 6 ، أما الرقم 7 فيحتاج إلى إلقاء نظرة على اسم/قيمة مربع الاختيار. وذلك لأن الأذونات تحتوي الآن على عنوان ووصف مترجم في Drupal 7.

لذا إذا كنت تريد اسم الإذن "عرض المحتوى المنشور" في Drupal 7 ، فإن القيمة هي "الوصول إلى المحتوى" وهو اسم الإذن الخاص بك.

إذا كنت تعرف الوحدة النمطية التي يأتي الإذن منها ، فيمكنك أيضًا التحقق من تنفيذ hook_perm () (D6)/ hook_pemission () (D7) لتلك الوحدة.

في كثير من الحالات ، ترغب في تحديد دفعاتك الخاصة واستخدامها ، يمكنك القيام بذلك باستخدام الخطافات أعلاه.

4
Berdir

استخدام وحدة Devel

  • بعد تثبيت وتمكين Devel الوحدة النمطية ، انتقل إلى admin/config/development/devel. هناك إعداد بعنوان "عرض أسماء الأجهزة للأذونات والوحدات". تأكد من التحقق من ذلك.

  • الآن على صفحة الأذونات في people/permissions ، مرر فوق اسم الإذن الذي تستجوبه. قد يؤخر ثانية أو اثنتين ، ولكن بعد ذلك ستظهر قيمة السلسلة.

4
mlanning

لقد أنشأت مقتطف جافا سكريبت الذي يساعدني في ذلك. لقد اختبرته في 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>");
});
1
Batandwa

فيما يلي تغيير نموذج بسيط سيضيف مفتاح الإذن للاسم في صفحة الأذونات. من المفترض أن يسهل ذلك البحث عنه. ستحتاج إلى إضافتها إلى وحدة مخصصة واستبدال "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 . ')';
    }
  }
}
1
Randall Knutson

هذه وحدة بسيطة لتسهيل الأمر: قائمة وسيطات الوصول

مع تحياتي

1
Bilal
db_query("SELECT DISTINCT {permission} FROM role_permission");
1
emallove

فقط ضع بعض الوحدات ، سترى أذونات الجهاز على / 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>)'; 
    }
}

مع تحياتي

0
Yurii K.