Risposte:
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);
}
}
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.
Quindi cerca il valore della casella di controllo e osserva il valore. (In questo caso la stringa è "crea contenuto coupon")
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;
}
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);
}
}
È 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.
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.
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.
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 . ')';
}
}
}
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>");
});
Questo è un modulo semplice per semplificare: accedi all'elenco degli argomenti
Saluti
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
array_keys()
ovviamente ottieni solo le informazioni richieste. È quindi possibile utilizzare anche il risultato inuser_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()));