it-swarm-id.com

Bagaimana saya bisa mengetahui daftar nilai $ string yang tersedia untuk fungsi user_access ($ string)?

user_access ($ string, $ account = NULL)

$ string: Izin, seperti "kelola node", sedang diperiksa.

Bagaimana saya bisa mengetahui daftar nilai $ string yang tersedia untuk fungsi user_access()?

27
gilzero

Selama setiap modul dapat mendefinisikan izinnya sendiri, tidak ada daftar "ketat" dari string tersebut. Anda perlu "membangun" itu jika Anda benar-benar perlu memiliki daftar seperti itu secara terprogram.

Anda dapat menjalankan skrip ini di halaman/devel/php. (Tentu saja, Anda memerlukan modul Devel .)

// 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

Seperti yang dikatakan @Berdir, cara termudah untuk melihat izin mana yang tersedia adalah dengan pergi ke izin admin/orang/izin di Drupal 7.

Masalah yang terus saya temui adalah bahwa saya tidak pernah tahu string apa yang saya butuhkan untuk menyediakan sebagai 'argumen akses' untuk benar-benar memanfaatkan izin tersebut. Nah, inilah cara Anda menemukan nama string untuk izin yang ingin Anda gunakan (Contoh ini menggunakan Google Chrome.)

Langkah pertama. Buka admin/orang/izin temukan izin yang ingin Anda gunakan dan klik kanan pada kotak centang di sebelah kanan izin yang ingin Anda gunakan. Pilih 'Periksa Elemen' atau lihat sumbernya.

Example

Selanjutnya cari nilai kotak centang dan catat nilainya. (Dalam hal ini stringnya adalah 'buat konten kupon')

enter image description here

Ini adalah string yang perlu Anda berikan sebagai argumen akses di hook_men ()

Kode Contoh: (item yang tidak relevan dihapus, jangan lupa judul, panggilan balik, dll. Di 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

Berikut adalah versi D7 dari jawaban Haza, dimodifikasi untuk menggunakan DSM alih-alih print_r dan untuk meninggalkan modul yang tidak menerapkan 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

Anda dapat menggunakan fungsi user_permission_get_modules() , yang mengembalikan array dari semua izin yang ditentukan dan modul mereka.

Tentukan modul yang memiliki izin.

Nilai pengembalian

Array asosiatif dalam format $ permit => $ module.

6
Елин Й.

Cara termudah adalah dengan memeriksa halaman izin (D7: admin/orang/izin, D6: admin/pengguna/izin). Perhatikan bahwa Anda secara langsung menggunakan string yang ditampilkan di Drupal 6, untuk 7 Anda harus melihat nama/nilai kotak centang. Ini karena izin sekarang memiliki judul dan deskripsi yang diterjemahkan dalam Drupal 7.

Jadi jika Anda ingin nama untuk izin "Lihat konten yang diterbitkan" di Drupal 7, nilainya adalah "akses konten" yang merupakan nama izin Anda.

Jika Anda tahu dari modul mana izin berasal, Anda juga dapat memeriksa yang sesuai hook_perm () (D6)/ hook_pemission () (D7) implementasi modul itu.

Dalam banyak kasus, Anda ingin mendefinisikan pemancar Anda sendiri dan menggunakannya, Anda dapat melakukannya dengan kait di atas.

4
Berdir

Menggunakan Modul Devel

  • Setelah menginstal dan mengaktifkan modul Devel , navigasikan ke admin/config/development/devel. Ada pengaturan berjudul, "Tampilkan nama mesin izin dan modul". Pastikan itu dicentang.

  • Sekarang di halaman izin di people/permissions, arahkan kursor ke atas nama izin yang Anda tanyakan. Mungkin menunda satu atau dua detik, tetapi kemudian nilai string akan ditampilkan.

4
mlanning

Saya buat cuplikan JavaScript ini yang membantu saya dalam hal ini. Saya mengujinya dalam Drupal 7 hanya pada tema Shiny .

Ini pada dasarnya menampilkan nama mesin, diambil dari kotak centang pertama pada nama itu, ke sel pertama, di bawah label. Script ini bergantung pada jQuery, yang seharusnya tidak menjadi masalah pada Drupal 7.

Saya biasanya menempelkannya di konsol Alat Pengembang dan menjalankannya dari sana. Saya mungkin membuat bookmarklet untuk itu di masa depan.

// 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

Berikut ini adalah formulir perubahan sederhana yang akan menambahkan kunci izin ke nama pada halaman izin. Itu akan membuatnya lebih mudah untuk mencarinya. Anda harus menambahkannya ke modul khusus dan mengganti "mymodule" dengan nama modul itu.

/**
 * 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

Ini adalah modul sederhana untuk membuatnya mudah: Access Arguments List

Salam

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

cukup masukkan beberapa modul, Anda akan melihat izin mesin di / admin/people/permissions

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>)'; 
    }
}

salam

0
Yurii K.