Come posso trovare un elenco di valori $ string disponibili per la funzione user_access ($ string)?


27

user_access ($ string, $ account = NULL)

$ string: l'autorizzazione, ad esempio "gestisci nodi", viene controllata.

Come posso trovare un elenco di valori $ string disponibili per la user_access()funzione?

Risposte:


12

Finché ogni modulo può definire le proprie autorizzazioni, non esiste un elenco "rigoroso" di tali stringhe. Dovrai "costruirlo" se hai davvero bisogno di avere un tale elenco a livello di codice.

È possibile eseguire questo script in una pagina / devel / php. (Certo, hai bisogno del modulo 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);
  }
}

26

Come ha detto @Berdir, il modo più semplice per vedere quali autorizzazioni sono disponibili è andare alle autorizzazioni admin / persone / autorizzazioni in Drupal 7.

Il problema in cui mi sono imbattuto è che non sono mai riuscito a capire quale stringa avessi bisogno di fornire come "argomento di accesso" per utilizzare effettivamente l'autorizzazione. Bene, ecco come trovare il nome della stringa per le autorizzazioni che si desidera utilizzare (Questo esempio utilizza Google Chrome.)

Primo passo. Vai su admin / persone / autorizzazioni per trovare l'autorizzazione che desideri utilizzare e fai clic con il pulsante destro del mouse su una casella di controllo a destra dell'autorizzazione che desideri utilizzare. Seleziona 'Ispeziona elemento' o vai semplicemente a guardare la fonte.

Esempio

Quindi cerca il valore della casella di controllo e osserva il valore. (In questo caso la stringa è "crea contenuto coupon")

inserisci qui la descrizione dell'immagine

Questa è la stringa che devi fornire come argomento di accesso in hook_menu ()

Codice di esempio: (elementi non rilevanti rimossi, non dimenticare il titolo, il callback, ecc. In hook_menu ())

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

9

Ecco una versione D7 della risposta di Haza, modificata per utilizzare DSM invece di print_r e per escludere i moduli che non implementano 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);
  }
}

6

È possibile utilizzare la user_permission_get_modules()funzione, che restituisce un array di tutte le autorizzazioni definite e dei relativi moduli.

Determinare i moduli a cui appartengono le autorizzazioni.

Valore di ritorno

Un array associativo nel formato $ permesso => ​​$ modulo.


2
Se lo avvolgi array_keys()ovviamente ottieni solo le informazioni richieste. È quindi possibile utilizzare anche il risultato in user_role_grant_permissions, ad esempio, di concedere il ruolo di amministratore tutte le autorizzazioni:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));
aross

4

Il modo più semplice è controllare la pagina delle autorizzazioni (D7: admin / persone / autorizzazioni, D6: admin / utente / autorizzazioni). Nota che usi direttamente la stringa visualizzata in Drupal 6, per 7 devi dare un'occhiata al nome / valore della casella di controllo. Questo perché le autorizzazioni ora hanno un titolo e una descrizione tradotti in Drupal 7.

Quindi, se vuoi il nome per l'autorizzazione "Visualizza contenuto pubblicato" in Drupal 7, il valore è "accedi al contenuto" che è il tuo nome di autorizzazione.

Se sai da quale modulo proviene l'autorizzazione, puoi anche controllare l' implementazione hook_perm () (D6) / hook_pemission () (D7) corrispondente di quel modulo.

In molti casi, vuoi definire le tue commissioni personali e usarle, puoi farlo con i ganci sopra.


RE: "Il modo più semplice è controllare la pagina delle autorizzazioni (D7: admin / persone / autorizzazioni,).". La pagina mostra un elenco di autorizzazioni, ma sono stringhe leggibili dall'uomo piuttosto che stringhe leggibili dalla macchina.
Gilzero,

1
Come ho scritto sotto, il nome leggibile dalla macchina può essere estratto dal valore di una delle caselle di controllo per una determinata autorizzazione.
Berdir,

Questa risposta copre Drupal 6 e 7, quella accettata solo Drupal 6 - ma la risposta accettata è un trucco chiaro e potrebbe essere facilmente modificata per Drupal 7. =)
Greg

4

Utilizzo del modulo Devel

  • Dopo aver installato e abilitato il modulo Devel , accedere a admin/config/development/devel. Esiste un'impostazione denominata "Visualizza i nomi macchina di autorizzazioni e moduli". Assicurati che sia selezionato.

  • Ora nella pagina delle autorizzazioni su people/permissions, passa con il mouse sopra il nome dell'autorizzazione che stai interrogando. Potrebbe ritardare un secondo o due, ma poi verrà mostrato il valore della stringa.


Wow, non lo sapevo. L'ho visto dopo che ho pubblicato la mia risposta. Grazie!
Batandwa,

Molto utile! TYVM.
DrCord,

Dolce, molto più facile che aprire il codice del modulo!
bloke_zero,

1

Ecco una semplice modifica del modulo che aggiungerà la chiave di autorizzazione al nome nella pagina delle autorizzazioni. Ciò dovrebbe rendere più semplice la ricerca. Dovrai aggiungerlo a un modulo personalizzato e sostituire "mymodule" con il nome di quel modulo.

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

Ho creato questo snippet JavaScript che mi aiuta in questo. L'ho provato in Drupal 7 solo sul tema Shiny .

Fondamentalmente restituisce il nome della macchina, preso dalla prima casella di controllo su quel nome, sulla prima cella, sotto l'etichetta. Lo script si basa su jQuery, che non dovrebbe essere un problema su Drupal 7.

In genere lo incollo sulla console Strumenti per gli sviluppatori ed eseguo da lì. Potrei creare un bookmarklet per esso in futuro.

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

E grazie al servizio Bookmarkify.it puoi trovare il bookmarklet qui .
Batandwa,

Questo è uno strumento davvero utile, ty!
DrCord,

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


0

basta inserire alcuni moduli, vedrai le autorizzazioni della macchina in / 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>)'; 
    }
}

Saluti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.