Como posso encontrar uma lista dos valores $ string disponíveis para a função user_access ($ string)?


27

user_access ($ string, $ account = NULL)

$ string: a permissão, como "administrar nós", está sendo verificada.

Como posso descobrir uma lista dos valores de string $ disponíveis para a user_access()função?

Respostas:


12

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

26

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.

Exemplo

Em seguida, procure o valor da caixa de seleção e observe o valor. (Nesse caso, a sequência é 'criar conteúdo do cupom')

insira a descrição da imagem aqui

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;
}

9

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

6

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.


2
Se você o envolver, array_keys()obviamente obterá apenas as informações solicitadas. Em seguida, você também pode usar o resultado em user_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()));
aross

4

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.


RE: "A maneira mais fácil é verificar a página de permissão (D7: admin / pessoas / permissões,).". A página mostra uma lista de permissões, mas elas são uma sequência legível por humanos, em vez de uma sequência legível por máquina.
gilzero

11
Como escrevi abaixo, o nome legível pela máquina pode ser extraído do valor de qualquer uma das caixas de seleção para uma determinada permissão.
Berdir

Esta resposta cobre Drupal 6 e 7, a única aceitos somente Drupal 6 - mas a resposta aceita é um truque e pode ser facilmente alterada para Drupal 7. =)
Greg

4

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.


Uau, eu não sabia disso. Vi depois que eu postei minha resposta. Obrigado!
Batandwa

Muito útil! TYVM.
DrCord

Doce, muito mais fácil do que abrir o código do módulo!
Blok_zero

1

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 . ')';
    }
  }
}

1

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

E, graças ao serviço Bookmarkify.it , você pode encontrar o bookmarklet aqui .
Batandwa

Esta é uma ferramenta realmente útil, ty!
DrCord 4/08/14

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


0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.