web-dev-qa-db-fra.com

Comment puis-je trouver une liste des valeurs $ string disponibles pour la fonction user_access ($ string)?

user_access ($ string, $ account = NULL)

$ string: l'autorisation, telle que "administrer les nœuds", en cours de vérification.

Comment puis-je trouver une liste des valeurs $ string disponibles pour la fonction user_access()?

27
gilzero

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

Comme l'a dit @Berdir, le moyen le 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.

Example

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")

enter image description here

Il s'agit de la chaîne que vous devez fournir comme argument d'accès dans hook_men ()

Exemple de code: (éléments non pertinents supprimés, n'oubliez pas le titre, le rappel, etc. dans hook_men ())

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

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

Vous pouvez utiliser la fonction user_permission_get_modules() , qui renvoie un tableau de toutes les autorisations définies et de leurs modules.

Déterminez les modules auxquels les autorisations appartiennent.

Valeur de retour

Un tableau associatif au format $ permission => $ module.

6
Елин Й.

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 que le nom de l'autorisation "Afficher le contenu publié" dans Drupal 7, la valeur est "accéder au contenu" qui est le nom de votre autorisation.

Si vous savez de quel module provient l'autorisation, vous pouvez également vérifier l'implémentation correspondante hook_perm () (D6)/ hook_pemission () (D7) de ce module.

Dans de nombreux cas, vous souhaitez définir vos propres autorisations et les utiliser, vous pouvez le faire avec les crochets ci-dessus.

4
Berdir

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, survolez le nom de l'autorisation que vous interrogez. Cela peut retarder une seconde ou deux, mais la valeur de la chaîne s'affichera.

4
mlanning

J'ai créé cet extrait JavaScript qui m'aide à ce sujet. Je l'ai testé en Drupal 7 uniquement sur le Thème brillant .

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>");
});
1
Batandwa

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 . ')';
    }
  }
}
1
Randall Knutson

Ceci est un module simple pour le rendre facile: Access Arguments List

Cordialement

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

déposez simplement un module, vous verrez les autorisations de la machine sur / 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

0
Yurii K.