it-swarm-tr.com

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

user_access ($ string, $ account = NULL)

$ string: "Yönetici düğümleri" gibi izinler denetleniyor.

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

27
gilzero

Her modül kendi izinlerini tanımlayabildiği sürece, bu dizenin "katı" bir listesi yoktur. Programlı olarak böyle bir listeye sahip olmanız gerekiyorsa, bunu "yapılandırmanız" gerekecektir.

Bu komut dosyasını/devel/php sayfasında çalıştırabilirsiniz. (Elbette, 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);
  }
}
12
Haza

@Berdir'in dediği gibi, hangi izinlerin kullanılabilir olduğunu görmenin en kolay yolu, Drupal 7) içindeki yönetici/kişi/izinlere gitmektir.

Çalışmaya devam ettiğim sorun, izninden gerçekten faydalanmak için 'erişim argümanı' olarak hangi dizgiyi sağlamam gerektiğini asla anlayamıyorum. Kullanmak istediğiniz izinler için dize adını şu şekilde bulabilirsiniz (Bu örnekte Google Chrome kullanılır.)

Adım bir. Kullanmak istediğiniz izni bulmak için admin/people/permissions adresine gidin ve kullanmak istediğiniz iznin sağındaki onay kutusuna sağ tıklayın. 'Öğeyi Denetle'yi seçin veya kaynağa bakın.

Example

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

enter image description here

Bu, hook_men () içinde erişim bağımsız değişkeni olarak sağlamanız gereken dizedir

Örnek Kod: (alakalı olmayan öğeler kaldırıldı, hook_men () içindeki başlık, geri arama vb. Unutmayın.)

function fsrsys_menu() {
    $items = array();
    $items['my-custom-url'] = array(
        'access callback' => 'user_access',
        'access arguments' => array('create coupon content'),
    );
    return $items;
}
26
Citricguy

İşte Haza cevabının print_r yerine DSM kullanmak ve hook_permission uygulamayan modülleri dışarıda bırakmak için değiştirilmiş bir D7 versiyonu:

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

Tanımlı tüm izinlerin ve modüllerinin bir dizisini döndüren user_permission_get_modules() işlevini kullanabilirsiniz.

İzinlerin ait olduğu modülleri belirleyin.

Geri dönüş değeri

$ Allow => $ module biçimindeki ilişkilendirilebilir bir dizi.

6
Елин Й.

En kolay yol izin sayfasını kontrol etmektir (D7: admin/people/permissions, D6: admin/user/permissions). Görüntülenen dizeyi Drupal 6 içinde doğrudan kullandığınızı, 7 için onay kutusunun adına/değerine bakmanız gerektiğini unutmayın. Bunun nedeni, izinlerin artık Drupal 7 içinde çevrilmiş bir başlığı ve açıklaması olmasıdır.

Bu nedenle, Drupal 7'de "Yayınlanan içeriği görüntüle" izninin adını istiyorsanız, değer, izin adınız olan "içeriğe eriş" dir.

İznin hangi modülden geldiğini biliyorsanız, ilgili modülün ilgili hook_perm () (D6)/ hook_pemission () (D7) uygulamasını da kontrol edebilirsiniz.

Birçok durumda, kendi pemisyonlarınızı tanımlamak ve bunları kullanmak istiyorsunuz, bunu yukarıdaki kancalarla yapabilirsiniz.

4
Berdir

Devel Modülünü Kullanma

  • Devel modülünü kurduktan ve etkinleştirdikten sonra admin/config/development/devel. "İzinlerin ve modüllerin makine adlarını göster" başlıklı bir ayar vardır. İşaretli olduğundan emin olun.

  • Şimdi people/permissions, imleci sorguladığınız iznin adının üzerine getirin. Bir veya iki saniye geciktirebilir, ancak dize değeri gösterilir.

4
mlanning

Bu konuda bana yardımcı olan bu JavaScript snippet'i oluşturdum. Drupal 7 sadece Shiny theme üzerinde test ettim.

Temel olarak, o addaki ilk onay kutusundan, etiketin altındaki ilk hücreye alınan makine adını verir. Komut dosyası, jQuery'ye dayanmaktadır; bu, Drupal 7 ile ilgili bir sorun olmamalıdır).

Genellikle Geliştirici Araçları konsoluna yapıştırıyorum ve oradan çalıştırıyorum. İleride 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>");
});
1
Batandwa

Burada izin anahtarını izinler sayfasındaki ada ekleyecek basit bir form değişikliği vardır. Bu, aramayı kolaylaştırır. Özel bir modüle eklemeniz ve "mymodule" ifadesini bu modülün adıyla değiştirmeniz gerekir.

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

Bu, kolaylaştırmak için basit bir modüldür: Erişim Bağımsız Değişkenleri Listesi

Saygılarımızla

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

sadece bazı modüllere bırakın, makine izinlerini / admin/people/permissions adresinde görebilirsiniz.

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

0
Yurii K.