Respostas:
Desde que todos os módulos possam definir suas próprias permissões, não há uma lista "estrita" dessas strings. Você precisará "construí-lo" se realmente precisar dessa lista programaticamente.
Você pode executar este script em uma página / devel / php. (Obviamente, você precisa do 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 o @Berdir disse, a maneira mais fácil de ver quais permissões estão disponíveis é acessar as permissões admin / people / permissions no Drupal 7.
O problema com o qual eu continuava me deparando é que nunca consegui descobrir qual sequência eu precisava fornecer como um 'argumento de acesso' para realmente usar a permissão. Bem, aqui está como você encontra o nome da string para as permissões que deseja usar (este exemplo usa o Google Chrome.)
Passo um. Vá para admin / people / Permissions, encontre a permissão que você gostaria de usar e clique com o botão direito do mouse em uma caixa de seleção à direita da permissão que você gostaria de usar. Selecione 'Inspecionar elemento' ou apenas vá ver a fonte.
Em seguida, procure o valor da caixa de seleção e observe o valor. (Nesse caso, a sequência é 'criar conteúdo do cupom')
Essa é a string que você precisa fornecer como argumento de acesso em hook_menu ()
Código de exemplo: (itens não relevantes removidos, não se esqueça do título, retorno de chamada etc. em hook_menu ())
function fsrsys_menu() {
$items = array();
$items['my-custom-url'] = array(
'access callback' => 'user_access',
'access arguments' => array('create coupon content'),
);
return $items;
}
Aqui está uma versão D7 da resposta do Haza, modificada para usar o DSM em vez de print_r e deixar de fora os módulos que não implementam 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);
}
}
Você pode usar a user_permission_get_modules()
função, que retorna uma matriz de todas as permissões definidas e seus módulos.
Determine os módulos aos quais as permissões pertencem.
Valor de retorno
Uma matriz associativa no formato $ permission => $ module.
A maneira mais fácil é verificar a página de permissão (D7: admin / pessoas / permissões, D6: admin / usuário / permissões). Observe que você usa diretamente a seqüência de caracteres exibida no Drupal 6; para 7, você precisa dar uma olhada no nome / valor da caixa de seleção. Isso ocorre porque as permissões agora têm um título e uma descrição traduzidos no Drupal 7.
Portanto, se você deseja o nome da permissão "Visualizar conteúdo publicado" no Drupal 7, o valor é "acessar conteúdo", que é o seu nome de permissão.
Se você souber de qual módulo a permissão é proveniente, também poderá verificar a implementação hook_perm () (D6) / hook_pemission () (D7) correspondente desse módulo.
Em muitos casos, você deseja definir suas próprias permissões e usá-las. Você pode fazer isso com os ganchos acima.
Usando o módulo Devel
Após instalar e ativar o módulo Devel , navegue para admin/config/development/devel
. Há uma configuração intitulada "Exibir nomes de máquinas de permissões e módulos". Verifique se está marcado.
Agora, na página de permissões em people/permissions
, passe o mouse sobre o nome da permissão que você está questionando. Pode demorar um ou dois segundos, mas o valor da string será exibido.
Aqui está um simples formulário de alteração que adicionará a chave de permissão ao nome na página de permissões. Isso deve facilitar a procura. Você precisará adicioná-lo a um módulo personalizado e substituir "mymodule" pelo nome desse 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 . ')';
}
}
}
Eu criei esse snippet JavaScript que me ajuda com isso. Eu testei no Drupal 7 apenas no tema Shiny .
Basicamente, gera o nome da máquina, retirado da primeira caixa de seleção desse nome, para a primeira célula, sob o rótulo. O script depende do jQuery, que não deve ser um problema no Drupal 7.
Normalmente colo-o no console das Ferramentas do desenvolvedor e o executo a partir daí. Eu posso criar um bookmarklet para ele no 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 é um módulo simples para facilitar: Lista de argumentos de acesso
Saudações
basta inserir um módulo, você verá as permissões da máquina em / 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>)';
}
}
Saudações
array_keys()
obviamente obterá apenas as informações solicitadas. Em seguida, você também pode usar o resultado emuser_role_grant_permissions
, por exemplo, para conceder todas as permissões à função de administrador:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));