Respuestas:
Mientras cada módulo pueda definir sus propios permisos, no hay una lista "estricta" de esas cadenas. Tendrá que "construirlo" si realmente necesita tener dicha lista mediante programación.
Puede ejecutar este script en una página / devel / php. (Por supuesto, necesita el módulo 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);
}
}
Como dijo @Berdir, la forma más fácil de ver qué permisos están disponibles es ir a los permisos admin / people / permissions en Drupal 7.
El problema con el que me encontré es que nunca pude averiguar qué cadena necesitaba proporcionar como un 'argumento de acceso' para hacer uso del permiso. Bueno, así es como encuentra el nombre de la cadena para los permisos que desea usar (este ejemplo usa Google Chrome).
Paso uno. Vaya a admin / people / permissions, busque el permiso que le gustaría usar y haga clic derecho en una casilla de verificación a la derecha del permiso que le gustaría usar. Seleccione 'Inspeccionar elemento' o simplemente mire la fuente.
Luego busque el valor de la casilla de verificación y anote el valor. (En este caso, la cadena es 'crear contenido de cupón')
Esta es la cadena que debe proporcionar como argumento de acceso en hook_menu ()
Código de ejemplo: (elementos no relevantes eliminados, no olvide el título, la devolución de llamada, etc. en hook_menu ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Aquí hay una versión D7 de la respuesta de Haza, modificada para usar DSM en lugar de print_r y para dejar de lado los módulos que no implementan 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);
}
}
Puede usar la user_permission_get_modules()
función, que devuelve una matriz de todos los permisos definidos y sus módulos.
Determine los módulos a los que pertenecen los permisos.
Valor de retorno
Una matriz asociativa en el formato $ permission => $ module.
La forma más fácil es consultar la página de permisos (D7: admin / people / permissions, D6: admin / user / permissions). Tenga en cuenta que utiliza directamente la cadena que se muestra en Drupal 6, para 7 necesita echar un vistazo al nombre / valor de la casilla de verificación. Esto se debe a que los permisos ahora tienen un título y una descripción traducidos en Drupal 7.
Entonces, si desea el nombre para el permiso "Ver contenido publicado" en Drupal 7, el valor es "acceder al contenido", que es su nombre de permiso.
Si sabe de qué módulo proviene el permiso, también puede verificar la implementación correspondiente de hook_perm () (D6) / hook_pemission () (D7) de ese módulo.
En muchos casos, desea definir sus propios permisos y usarlos, puede hacerlo con los ganchos anteriores.
Usando el módulo de desarrollo
Después de instalar y habilitar el módulo Devel , navegue hasta admin/config/development/devel
. Existe una configuración titulada "Mostrar nombres de máquinas de permisos y módulos". Asegúrese de que esté marcado.
Ahora en la página de permisos en people/permissions
, desplace el mouse sobre el nombre del permiso que está cuestionando. Puede demorar un segundo o dos, pero luego se mostrará el valor de la cadena.
Aquí hay un formulario simple que agregará la clave de permiso al nombre en la página de permisos. Eso debería hacer que sea más fácil buscarlo. Deberá agregarlo a un módulo personalizado y reemplazar "mymodule" con el nombre de ese módulo.
/**
* 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 . ')';
}
}
}
Creé este fragmento de JavaScript que me ayuda con esto. Lo probé en Drupal 7 solo en el tema Shiny .
Básicamente, muestra el nombre de la máquina, tomado de la primera casilla de ese nombre, en la primera celda, debajo de la etiqueta. El script se basa en jQuery, que no debería ser un problema en Drupal 7.
Normalmente lo pego en la consola de Developer Tools y lo ejecuto desde allí. Podría crear un bookmarklet para él en el 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>");
});
Este es un módulo simple para facilitarlo: Acceda a la Lista de argumentos
Saludos
simplemente coloque algún módulo, verá los permisos de la máquina en / 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>)';
}
}
Saludos
array_keys()
obviamente obtendrá solo la información solicitada. También puede utilizar el resultadouser_role_grant_permissions
, por ejemplo, para otorgarle al rol de administrador todos los permisos:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));