Réponses:
Tant que chaque module peut définir ses propres autorisations, il n'y a pas de liste "stricte" de ces chaînes. Vous devrez le "construire" si vous avez vraiment besoin d'avoir une telle liste par programme.
Vous pouvez exécuter ce script dans une page / devel / php. (Bien sûr, vous avez besoin du module 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);
}
}
Comme l'a dit @Berdir, la façon la plus simple de voir quelles autorisations sont disponibles est d'aller dans les autorisations admin / people / permissions dans Drupal 7.
Le problème que je continuais à rencontrer était que je ne pouvais jamais comprendre quelle chaîne je devais fournir comme «argument d'accès» pour réellement utiliser l'autorisation. Eh bien, voici comment trouver le nom de chaîne pour les autorisations que vous souhaitez utiliser (Cet exemple utilise Google Chrome.)
La première étape. Accédez à admin / personnes / autorisations pour trouver l'autorisation que vous souhaitez utiliser et cliquez avec le bouton droit sur une case à cocher à droite de l'autorisation que vous souhaitez utiliser. Sélectionnez «Inspecter l'élément» ou allez simplement regarder la source.
Recherchez ensuite la valeur de la case à cocher et notez la valeur. (Dans ce cas, la chaîne est «créer le contenu du coupon»)
Il s'agit de la chaîne que vous devez fournir comme argument d'accès dans hook_menu ()
Exemple de code: (éléments non pertinents supprimés, n'oubliez pas le titre, le rappel, etc. dans hook_menu ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Voici une version D7 de la réponse de Haza, modifiée pour utiliser DSM au lieu de print_r et pour exclure les modules qui n'implémentent pas hook_permission:
// 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);
}
}
Vous pouvez utiliser la user_permission_get_modules()
fonction, qui renvoie un tableau de toutes les autorisations définies et leurs modules.
Déterminez les modules auxquels les autorisations appartiennent.
Valeur de retour
Un tableau associatif au format $ permission => $ module.
Le moyen le plus simple consiste à vérifier la page des autorisations (D7: admin / people / permissions, D6: admin / user / permissions). Notez que vous utilisez directement la chaîne affichée dans Drupal 6, pour 7, vous devez regarder le nom / la valeur de la case à cocher. En effet, les autorisations ont désormais un titre et une description traduits dans Drupal 7.
Donc, si vous voulez le nom de l'autorisation "Afficher le contenu publié" dans Drupal 7, la valeur est "accéder au contenu" qui est votre nom d'autorisation.
Si vous savez de quel module provient l'autorisation, vous pouvez également vérifier l' implémentation correspondante de hook_perm () (D6) / hook_pemission () (D7) de ce module.
Dans de nombreux cas, vous souhaitez définir vos propres émissions et les utiliser, vous pouvez le faire avec les crochets ci-dessus.
Utilisation du module Devel
Après avoir installé et activé le module Devel , accédez à admin/config/development/devel
. Il existe un paramètre intitulé "Afficher les noms de machine des autorisations et des modules". Assurez-vous que cette case est cochée.
Maintenant, sur la page des autorisations à people/permissions
, passez la souris sur le nom de l'autorisation que vous interrogez. Cela peut retarder une seconde ou deux, mais la valeur de la chaîne s'affichera.
Voici une modification de formulaire simple qui ajoutera la clé d'autorisation au nom sur la page des autorisations. Cela devrait faciliter la recherche. Vous devrez l'ajouter à un module personnalisé et remplacer "mymodule" par le nom de ce module.
/**
* 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 . ')';
}
}
}
J'ai créé cet extrait de code JavaScript qui m'aide à ce sujet. Je l'ai testé dans Drupal 7 uniquement sur le thème Shiny .
Il affiche essentiellement le nom de la machine, extrait de la première case à cocher de ce nom, dans la première cellule, sous l'étiquette. Le script repose sur jQuery, ce qui ne devrait pas poser de problème sur Drupal 7.
Je le colle généralement sur la console Developer Tools et je l'exécute à partir de là. Je pourrais créer un bookmarklet pour cela à l'avenir.
// 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>");
});
Voici un module simple pour vous faciliter la tâche: Accéder à la liste des arguments
Cordialement
déposez simplement un module, vous verrez les autorisations de la machine dans / 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>)';
}
}
Cordialement
array_keys()
vous n'obtenez évidemment que les informations demandées. Vous pouvez ensuite également utiliser le résultat dansuser_role_grant_permissions
, par exemple pour accorder au rôle d'administrateur toutes les autorisations:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));