Qual é a diferença entre argumentos de acesso e retorno de chamada de acesso?

21

Qual é a diferença entre argumentos de acesso e retorno de chamada de acesso?

Suponha que eu defina o retorno de chamada de acesso como 'user_access'e array('custom permission')é o valor para os argumentos de acesso.

O que isso significa? Como eles se afetam?

user1359
fonte

Respostas:

27

"Acessar retorno de chamada" é a função chamada para verificar se o usuário tem acesso à página. Como caso especial, poderia ser o valor TRUEe, nesse caso, todos os usuários teriam acesso a ele; em outras palavras, a permissão de acesso seria ignorada.

No caso de você estar usando um nome de função para o valor "acessar retorno de chamada" (por padrão, é "acesso_usuário"), também poderá usar "argumentos de acesso", que é uma matriz que contém os argumentos passados ​​para a função de retorno de chamada de acesso.
Como em outros retornos de chamada do menu, os argumentos devem ser uma sequência ou um número; caso seja um número, o valor será substituído por um valor retirado do caminho do menu. Se você deseja evitar essa substituição, em vez de um número, você precisa usar uma string; por exemplo, usar "1"como um para os argumentos passados ​​para o retorno de chamada de acesso evitaria a substituição automática.

Estes são alguns exemplos de declarações de retorno de chamada de menu usadas nos módulos principais do Drupal. (Os exemplos são do código Drupal 7, mas para o que quero salientar, isso não faz nenhuma diferença.)

Este é um exemplo em que o retorno de chamada de acesso é user_access () .

  $items['file/progress'] = array(
    'page callback' => 'file_ajax_progress', 
    'delivery callback' => 'ajax_deliver', 
    'access arguments' => array('access content'), 
    'theme callback' => 'ajax_base_page_theme', 
    'type' => MENU_CALLBACK,
  );

Este é um exemplo em que o retorno de chamada de acesso não é um nome de função.

  $items['user'] = array(
    'title' => 'User account', 
    'title callback' => 'user_menu_title', 
    'page callback' => 'user_page', 
    'access callback' => TRUE, 
    'file' => 'user.pages.inc', 
    'weight' => -10, 
    'menu_name' => 'user-menu',
  );

Nesse caso, o retorno de chamada de acesso é user_view_access () ao qual é passado, não o número 1, mas um valor obtido no caminho do menu (que nesse caso é "user /% user"); este é um caso específico, pois a função obterá o valor retornado por user_load().

  $items['user/%user'] = array(
    'title' => 'My account', 
    'title callback' => 'user_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'user_view_page', 
    'page arguments' => array(1), 
    'access callback' => 'user_view_access', 
    'access arguments' => array(1),
    // By assigning a different menu name, this item (and all registered child
    // paths) are no longer considered as children of 'user'. When accessing the
    // user account pages, the preferred menu link that is used to build the
    // active trail (breadcrumb) will be found in this menu (unless there is
    // more specific link), so the link to 'user' will not be in the breadcrumb. 
    'menu_name' => 'navigation',
  );

Suponha que o menu anterior tenha sido definido da seguinte maneira e chamado com um caminho como "usuário / olá".

  $items['user/%'] = array(
    'title' => 'My account', 
    'title callback' => 'user_page_title', 
    'title arguments' => array(1), 
    'page callback' => 'user_view_page', 
    'page arguments' => array(1), 
    'access callback' => 'user_view_access', 
    'access arguments' => array(1),
    // By assigning a different menu name, this item (and all registered child
    // paths) are no longer considered as children of 'user'. When accessing the
    // user account pages, the preferred menu link that is used to build the
    // active trail (breadcrumb) will be found in this menu (unless there is
    // more specific link), so the link to 'user' will not be in the breadcrumb. 
    'menu_name' => 'navigation',
  );

Nesse caso, o retorno de chamada de acesso teria recebido como argumento o valor obtido do caminho (0 significa "usuário" e 1 significa a parte após "usuário" e a barra); nesse caso, esse valor é "olá".

Para entender melhor esses argumentos curinga, consulte Argumentos do carregador curinga . A página de documentação está identificada como Drupal 6, mas o que foi relatado ainda é válido para o Drupal 7.

kiamlaluno
fonte
explicação incrível. Na minha exigência, algum botão personalizado diz que "votar agora" deve ser processado apenas pelo usuário autenticado, mas o botão também deve ser mostrado para o anônimo e, quando o usuário anônimo clicar no botão, ele deve redirecionar para a página de login e o processo continua. Para esse cenário em particular, existe uma condição de acesso especial para mostrar o botão anônimo? Comentando aqui, porque isso tornaria este post mais completo.
Marcado
4

O retorno de chamada de acesso é uma função que examina se algum usuário tem algumas permissões. O retorno de chamada de acesso padrão é user_access ()

Os argumentos de acesso lista a permissão que são examinados pelo retorno de chamada de acesso. por exemplo, "acessar conteúdo"

Shoaib Nawaz
fonte
O que mais pode ser um valor access callback? Se fosse algo diferente user_access(), isso evitaria a necessidade access arguments?
user1359
2
O que você quiser. Qualquer função que retorne VERDADEIRO ou FALSO.
Berdir 27/06
Então você não precisaria access arguments?
user1359
Sim, então você pode ignorá-lo
Shoaib Nawaz