Jawaban:
Selama setiap modul dapat mendefinisikan izin mereka 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);
}
}
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.
Selanjutnya cari nilai kotak centang dan catat nilainya. (Dalam hal ini stringnya adalah 'buat konten kupon')
Ini adalah string yang perlu Anda berikan sebagai argumen akses di hook_menu ()
Kode Contoh: (item yang tidak relevan dihapus, jangan lupa judul, panggilan balik, dll. Di hook_menu ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Ini adalah versi D7 dari jawaban Haza, dimodifikasi untuk menggunakan DSM alih-alih print_r dan 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);
}
}
Anda dapat gunakan user_permission_get_modules()
fungsi, yang mengembalikan array dari semua izin yang ditentukan dan modul mereka.
Tentukan modul yang memiliki izin.
Nilai pengembalian
Array asosiatif dalam format $ permit => $ module.
Cara termudah adalah dengan memeriksa halaman izin (D7: admin / orang / izin, D6: admin / pengguna / izin). Perhatikan bahwa Anda 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 "akses konten" yang merupakan nama izin Anda.
Jika Anda tahu dari modul mana izin itu berasal, Anda juga dapat memeriksa penerapan hook_perm () (D6) / hook_pemission () (D7) yang sesuai dari modul itu.
Dalam banyak kasus, Anda ingin menentukan pemancar Anda sendiri dan menggunakannya, Anda bisa melakukannya dengan kait di atas.
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 nama izin yang Anda tanyakan. Mungkin menunda satu atau dua detik, tetapi kemudian nilai string akan ditampilkan.
Berikut ini adalah formulir perubahan sederhana yang akan menambahkan kunci izin ke nama pada halaman izin. Itu akan membuatnya lebih mudah untuk melihatnya. Anda perlu 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 . ')';
}
}
}
Saya membuat cuplikan JavaScript ini yang membantu saya dalam hal ini. Saya mengujinya di 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. Skrip 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>");
});
Ini adalah modul sederhana untuk membuatnya mudah: Access Arguments List
Salam
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
array_keys()
Anda jelas hanya mendapatkan informasi yang diminta. Anda kemudian dapat juga menggunakan hasilnya diuser_role_grant_permissions
, misalnya untuk memberikan peran admin semua izin:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));