Yanıtlar:
Her modül kendi izinlerini tanımlayabildiği sürece, bu dizgilerin "katı" bir listesi yoktur. Programatik olarak böyle bir listeye gerçekten ihtiyacınız varsa, onu "yapılandırmanız" gerekir.
Bu betiği / devel / php sayfasında çalıştırabilirsiniz. (Tabii ki, Devel modülüne ihtiyacınız var .)
// 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’in dediği gibi, Drupal 7’de hangi izinlerin kullanılabilir olduğunu görmenin en kolay yolu izin yöneticisine / kişi / izinlerine gitmektir.
Karşılaştığım sorun şu ki, gerçekten iznini kullanmak için bir 'erişim argümanı' olarak hangi dizgiyi tedarik etmem gerektiğini asla çözemem. Peki, kullanmak istediğiniz izinlerin dize adını nasıl bulduğunuzu aşağıda bulabilirsiniz (Bu örnek Google Chrome'u kullanır.)
Adım bir. Yönetici / insanlar / izinler sayfasına gitmek istediğiniz izni bulun ve kullanmak istediğiniz izinlerin sağındaki onay kutularını sağ tıklayın. 'Elementi Denetle'yi seçin veya sadece kaynağa bakın.
Ardından onay kutusunun değerini arayın ve değeri not alın. (Bu durumda dize 'kupon içeriği oluştur' şeklindedir)
Bu, hook_menu'da bir erişim argümanı olarak sağlamanız gereken dizedir. () '
Örnek Kod: (alakalı olmayan öğeler kaldırıldı, hook_menu () 'da unvan, geri arama, vb. Unutma )
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
İşte Haza'nın cevabının D7 versiyonu, print_r yerine DSM kullanmak ve hook_permission uygulamayan modülleri dışarıda bırakmak için değiştirilmiş:
// 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()
Tanımlanan tüm izinlerin ve modüllerinin bir dizisini döndüren işlevi kullanabilirsiniz .
İzinlerin ait olduğu modülleri belirleyin.
Geri dönüş değeri
$ Allow biçiminde bir ilişkisel dizi:> $ module.
En kolay yol izin sayfasını kontrol etmektir (D7: admin / insanlar / izinler, D6: admin / kullanıcı / izinler). Drupal 6'da görüntülenen dizgiyi doğrudan kullandığınızı, 7 için onay kutusunun adına / değerine bir göz atmanız gerektiğini unutmayın. Bunun nedeni, izinlerin artık Drupal 7’de çevrilmiş bir unvanı ve açıklaması olmasıdır.
Bu nedenle, Drupal 7’deki "Yayınlanmış içeriği görüntüle" izninin adını istiyorsanız, değer, izin adınız olan "erişim içeriğine" denir.
İznin hangi modülden geldiğini biliyorsanız, o modülün ilgili hook_perm () (D6) / hook_pemission () (D7) uygulamasını da kontrol edebilirsiniz .
Çoğu durumda, kendi sapıklarınızı tanımlamak ve bunları kullanmak istersiniz, bunu yukarıdaki kancalarla yapabilirsiniz.
Devel Modülünü Kullanma
Devel modülünü kurduktan ve etkinleştirdikten sonra , konumuna gidin admin/config/development/devel
. "Makine izinlerini ve modül adlarını görüntüle" başlıklı bir ayar var. Kontrol edildiğinden emin ol.
Şimdi adresindeki izinler sayfasında, people/permissions
sorguladığınız iznin adının üzerine gelin. Bir veya iki saniyeyi geciktirebilir, ancak daha sonra dize değeri gösterilecektir.
İşte izin anahtarı sayfasındaki izin anahtarını ekleyecek basit bir form değiştirici. Bu aramak daha kolay hale getirmelidir. Özel bir modüle eklemeniz ve "mymodule" ile o modülün adını değiştirmeniz gerekecektir.
/**
* 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 . ')';
}
}
}
Bana bu konuda yardımcı olan bu JavaScript pasajını yarattım . Drupal 7'de yalnızca Parlak temada test ettim. .
Temel olarak, bu isimdeki ilk onay kutusundan alınan makine ismini, etiketin altındaki ilk hücreye çıkarır. Senaryo, Drupal 7'de problem olmaması gereken jQuery'e dayanıyor.
Genelde Geliştirici Araçları konsoluna yapıştırıyorum ve oradan çalıştırıyorum. Gelecekte bunun için bir yer işareti oluşturabilirim.
// 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>");
});
Bu kolay hale getirmek için basit bir modül: Access Arguments List
Saygılarımızla
sadece bazı modülleri bırakın, / admin / people / permissions dizininde makine izinlerini göreceksiniz
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>)';
}
}
Saygılarımızla
array_keys()
açıkça istenen bilgileri elde edersiniz. Daha sonra sonucuuser_role_grant_permissions
, örneğin yönetici rolüne tüm izinleri vermek için de kullanabilirsiniz :user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));