it-swarm.it

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

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 funzione user_access()?

27
gilzero

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. (Naturalmente, è necessario il 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);
  }
}
12
Haza

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 (in questo esempio viene utilizzato 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.

Example

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

enter image description here

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

Codice di esempio: (elementi non rilevanti rimossi, non dimenticare il titolo, il callback, ecc. In 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

Ecco una versione D7 della risposta di Haza, modificata per utilizzare DSM invece di print_r e per tralasciare 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);
  }
}
9
fureigh

È possibile utilizzare 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.

6
Елин Й.

Il modo più semplice è controllare la pagina delle autorizzazioni (D7: admin/persone/autorizzazioni, D6: admin/utente/autorizzazioni). Si noti che si utilizza direttamente la stringa visualizzata in Drupal 6, per 7 è necessario 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.

Pertanto, se si desidera il nome per l'autorizzazione "Visualizza contenuto pubblicato" in Drupal 7, il valore è "accedi al contenuto" che è il nome dell'autorizzazione.

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

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

4
Berdir

Uso del modulo Devel

  • Dopo aver installato e abilitato il modulo Devel , vai 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 all'indirizzo people/permissions, passa con il mouse sopra il nome dell'autorizzazione che stai interrogando. Potrebbe ritardare un secondo o due, ma verrà mostrato il valore della stringa.

4
mlanning

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

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

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
Randall Knutson

Questo è un semplice modulo per semplificare: Accedi all'elenco degli argomenti

Saluti

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

basta inserire alcuni moduli, vedrai le autorizzazioni della macchina su / admin/people/autorizzazioni

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

0
Yurii K.