User_access ($ string) işlevi için kullanılabilir $ string değerlerinin listesini nasıl bulabilirim?


27

user_access ($ string, $ account = NULL)

$ string: "admin düğümleri" gibi izinler kontrol edildi.

user_access()İşlev için kullanılabilir $ string değerlerinin listesini nasıl bulabilirim ?

Yanıtlar:


12

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

26

@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.

Örnek

Ardından onay kutusunun değerini arayın ve değeri not alın. (Bu durumda dize 'kupon içeriği oluştur' şeklindedir)

görüntü tanımını buraya girin

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

9

İş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);
  }
}

6

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.


2
İçine koyarsanız, array_keys()açıkça istenen bilgileri elde edersiniz. Daha sonra sonucu user_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()));
Ağustos

4

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.


RE: "En kolay yol izin sayfasını kontrol etmektir (D7: admin / people / permissions,).". Sayfada izinlerin bir listesi gösterilir, ancak bunlar makinede okunabilen bir dize yerine insan tarafından okunabilen bir dizedir.
gilzero

1
Aşağıda yazdığım gibi, makinenin okunabilir adı verilen izin için onay kutularının herhangi birinin değerinden çıkarılabilir.
Berdir

) = Ama kabul cevap düzgün bir hiledir ve kolayca Drupal 7 için değişmiş olabilir - Bu cevap Drupal 6 ve 7, sadece Drupal 6 kabul birini kapsıyorsa
Greg

4

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/permissionssorguladığınız iznin adının üzerine gelin. Bir veya iki saniyeyi geciktirebilir, ancak daha sonra dize değeri gösterilecektir.


Vay, bunu bilmiyordum. Cevabımı gönderdikten sonra gördüm. Teşekkürler!
Batandwa

Çok kullanışlı! TYVM.
DrCord

Tatlı, modül kodunu açmaktan çok daha kolay!
bloke_zero

1

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

1

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 gerçekten kullanışlı bir araçtır Ty!
DrCord

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


0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.