it-swarm.com.de

Wie kann ich eine Liste der verfügbaren $ string-Werte für die Funktion user_access ($ string) ermitteln?

user_access ($ string, $ account = NULL)

$ string: Die Berechtigung, z. B. "Knoten verwalten", wird überprüft.

Wie kann ich eine Liste der verfügbaren $ string-Werte für die Funktion user_access() herausfinden?

27
gilzero

Solange jedes Modul seine eigenen Berechtigungen definieren kann, gibt es keine "strenge" Liste dieser Zeichenfolgen. Sie müssen es "konstruieren", wenn Sie eine solche Liste wirklich programmgesteuert haben möchten.

Sie können dieses Skript auf einer/devel/php-Seite ausführen. (Natürlich benötigen Sie das 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

Wie @Berdir sagte, können Sie am einfachsten feststellen, welche Berechtigungen verfügbar sind, indem Sie zu den Berechtigungen admin/people/permissions in Drupal 7) gehen.

Das Problem, auf das ich immer wieder stieß, war, dass ich nie herausfinden konnte, welche Zeichenfolge ich als 'Zugriffsargument' angeben musste, um die Berechtigung tatsächlich nutzen zu können. Hier erfahren Sie, wie Sie den Zeichenfolgennamen für die Berechtigungen finden, die Sie verwenden möchten (in diesem Beispiel wird Google Chrome verwendet.)

Schritt eins. Gehen Sie zu admin/people/permissions und suchen Sie die Berechtigung, die Sie verwenden möchten. Klicken Sie mit der rechten Maustaste auf ein Kontrollkästchen rechts neben der Berechtigung, die Sie verwenden möchten. Wählen Sie "Element untersuchen" oder schauen Sie sich einfach die Quelle an.

Example

Suchen Sie als Nächstes nach dem Wert des Kontrollkästchens und notieren Sie den Wert. (In diesem Fall lautet die Zeichenfolge "Gutscheininhalt erstellen".)

enter image description here

Dies ist die Zeichenfolge, die Sie als Zugriffsargument in hook_men () angeben müssen.

Beispielcode: (nicht relevante Elemente entfernt, Titel, Rückruf usw. in hook_men () nicht vergessen)

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

Hier ist eine D7-Version von Hazas Antwort, die so geändert wurde, dass DSM anstelle von print_r verwendet wird und Module weggelassen werden, die hook_permission nicht implementieren:

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

Sie können die Funktion user_permission_get_modules() verwenden, die ein Array aller definierten Berechtigungen und ihrer Module zurückgibt.

Bestimmen Sie die Module, zu denen Berechtigungen gehören.

Rückgabewert

Ein assoziatives Array im Format $ allow => $ module.

6
Елин Й.

Am einfachsten ist es, die Berechtigungsseite zu überprüfen (D7: admin/people/permissions, D6: admin/user/permissions). Beachten Sie, dass Sie die angezeigte Zeichenfolge direkt in Drupal 6 verwenden. Für 7 müssen Sie den Namen/Wert des Kontrollkästchens überprüfen. Dies liegt daran, dass Berechtigungen jetzt einen übersetzten Titel und eine übersetzte Beschreibung in Drupal 7 haben.

Wenn Sie also den Namen für die Berechtigung "Veröffentlichten Inhalt anzeigen" in Drupal 7 möchten, lautet der Wert "Zugriff auf Inhalt". Dies ist Ihr Berechtigungsname.

Wenn Sie wissen, von welchem ​​Modul die Berechtigung stammt, können Sie auch die entsprechende Implementierung von hook_perm () (D6)/ hook_pemission () (D7) dieses Moduls überprüfen.

In vielen Fällen möchten Sie Ihre eigenen Pemissionen definieren und diese verwenden. Dies können Sie mit den oben genannten Hooks tun.

4
Berdir

Verwenden des Entwicklungsmoduls

  • Navigieren Sie nach der Installation und Aktivierung des Moduls Devel zu admin/config/development/devel. Es gibt eine Einstellung mit dem Titel "Anzeigen von Computernamen von Berechtigungen und Modulen". Stellen Sie sicher, dass dies aktiviert ist.

  • Jetzt auf der Berechtigungsseite unter people/permissions, bewegen Sie den Mauszeiger über den Namen der Berechtigung, die Sie in Frage stellen. Es kann ein oder zwei Sekunden verzögern, aber dann wird der Zeichenfolgenwert angezeigt.

4
mlanning

Ich habe dieses JavaScript-Snippet erstellt, das mir dabei hilft. Ich habe es in Drupal 7 nur auf dem Shiny Theme getestet.

Grundsätzlich wird der Computername ausgegeben, der vom ersten Kontrollkästchen für diesen Namen in die erste Zelle unter der Bezeichnung übernommen wurde. Das Skript basiert auf jQuery, was unter Drupal 7) kein Problem sein sollte.

Normalerweise füge ich es in die Developer Tools-Konsole ein und führe es von dort aus aus. Ich könnte in Zukunft ein Lesezeichen dafür erstellen.

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

Hier ist eine einfache Formularänderung, mit der der Berechtigungsschlüssel zum Namen auf der Berechtigungsseite hinzugefügt wird. Das sollte es einfacher machen, es nachzuschlagen. Sie müssen es einem benutzerdefinierten Modul hinzufügen und "mymodule" durch den Namen dieses Moduls ersetzen.

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

Dies ist ein einfaches Modul, um es einfach zu machen: Access Arguments List

Grüße

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

wenn Sie einfach ein Modul einfügen, sehen Sie die Computerberechtigungen unter / 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>)'; 
    }
}

grüße

0
Yurii K.