Antworten:
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 benötigen.
Sie können dieses Skript in einer / devel / php-Seite ausführen. (Natürlich benötigen Sie das Devel- Modul.)
// 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);
}
}
Wie @Berdir sagte, ist der einfachste Weg, um zu sehen, welche Berechtigungen verfügbar sind, zu den Berechtigungen admin / people / permissions in Drupal 7 zu gehen.
Das Problem, auf das ich stieß, war, dass ich nie herausfinden konnte, welche Zeichenfolge ich als 'Zugriffsargument' angeben musste, um die Berechtigung tatsächlich zu nutzen. Nun, hier finden Sie den String-Namen für die Berechtigungen, 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 'Inspect Element' oder schauen Sie sich einfach die Quelle an.
Suchen Sie als Nächstes nach dem Wert des Kontrollkästchens und notieren Sie den Wert. (In diesem Fall lautet die Zeichenfolge "Gutscheininhalt erstellen".)
Dies ist die Zeichenfolge, die Sie als Zugriffsargument in hook_menu () angeben müssen .
Beispielcode: (nicht relevante Elemente entfernt, Titel, Rückruf usw. in hook_menu () nicht vergessen )
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Hier ist eine D7-Version von Hazas Antwort, geändert, um DSM anstelle von print_r zu verwenden und Module wegzulassen, 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);
}
}
Sie können user_permission_get_modules()
function 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 $ permission => $ module.
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 in Drupal 7 jetzt einen übersetzten Titel und eine übersetzte Beschreibung haben.
Wenn Sie also den Namen für die Berechtigung "Veröffentlichten Inhalt anzeigen" in Drupal 7 möchten, lautet der Wert "Zugriffsinhalt". 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) für dieses Modul ü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.
Verwenden des Entwicklungsmoduls
Navigieren Sie nach der Installation und Aktivierung des Devel- Moduls zu admin/config/development/devel
. Es gibt eine Einstellung mit dem Titel "Computernamen von Berechtigungen und Modulen anzeigen". Stellen Sie sicher, dass dies aktiviert ist.
Bewegen Sie nun auf der Berechtigungsseite unter people/permissions
den Namen der Berechtigung, die Sie in Frage stellen. Es kann eine oder zwei Sekunden dauern, aber dann wird der Zeichenfolgenwert angezeigt.
Hier ist eine einfache Formularänderung, die dem Namen auf der Berechtigungsseite den Berechtigungsschlüssel hinzufügt. Das dürfte das Nachschlagen erleichtern. 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 . ')';
}
}
}
Ich habe dieses JavaScript-Snippet erstellt , das mir dabei hilft. Ich habe es in Drupal 7 nur auf dem Shiny-Thema getestet .
Es gibt im Grunde den Computernamen aus, der vom ersten Kontrollkästchen dieses Namens in die erste Zelle unter dem Etikett ü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>");
});
Dies ist ein einfaches Modul, um es einfach zu machen: Access Arguments List
Grüße
Schauen Sie einfach in ein Modul, Sie sehen die Maschinenberechtigungen 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
array_keys()
Sie offensichtlich nur die angeforderten Informationen. Sie können das Ergebnis dann beispielsweise auch verwendenuser_role_grant_permissions
, um der Administratorrolle alle Berechtigungen zu erteilen:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));