¿Cuál es la diferencia entre argumentos de acceso y devolución de llamada de acceso?

21

¿Cuál es la diferencia entre argumentos de acceso y devolución de llamada de acceso?

Supongamos que establezco la devolución de llamada de acceso en 'user_access', y array('custom permission')es el valor de los argumentos de acceso.

Qué significa eso? ¿Cómo se afectan mutuamente?

usuario1359
fuente

Respuestas:

27

"Devolver llamada de acceso" es la función que se llama para verificar que el usuario tenga acceso a la página. Como caso especial, podría ser el valor TRUE, y en ese caso todos los usuarios tendrían acceso a él; en otras palabras, se omitiría el permiso de acceso.

En el caso de que esté usando un nombre de función para el valor de "devolución de llamada de acceso" (por defecto, es "acceso de usuario"), también puede usar "argumentos de acceso", que es una matriz que contiene los argumentos pasados ​​a la función de devolución de llamada de acceso.
Al igual que con otras devoluciones de llamada de menú, los argumentos deben ser una cadena o un número; en el caso de que sea un número, el valor será reemplazado por un valor tomado de la ruta del menú. Si desea evitar este reemplazo, en lugar de un número, debe usar una cadena; por ejemplo, el uso "1"como uno para los argumentos pasados ​​a la devolución de llamada de acceso evitaría el reemplazo automático.

Estos son algunos ejemplos de declaraciones de devolución de llamada de menú utilizadas desde los módulos principales de Drupal. (Los ejemplos son del código Drupal 7, pero por lo que quiero señalar, eso no hace ninguna diferencia).

Este es un ejemplo donde la devolución de llamada de acceso es 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 es un ejemplo donde la devolución de llamada de acceso no es un nombre de función.

  $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',
  );

En este caso, la devolución de llamada de acceso es user_view_access () a la que se pasa, no el número 1, sino un valor tomado de la ruta del menú (que en este caso es "usuario /% usuario"); Este es un caso particular, ya que la función obtendrá el valor devuelto 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',
  );

Supongamos que el menú anterior se definió de la siguiente manera e invocó con una ruta como "usuario / hola".

  $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',
  );

En este caso, la devolución de llamada de acceso habría recibido como argumento el valor tomado de la ruta (0 significa "usuario" y 1 significa la parte después de "usuario" y la barra inclinada); en este caso, ese valor es "hola".

Para comprender mejor estos argumentos comodín, consulte Argumentos del cargador comodín . La página de documentación está etiquetada con Drupal 6, pero lo que se informa sigue siendo válido para Drupal 7.

kiamlaluno
fuente
Increíble explicación. En mi requisito, un botón personalizado que dice "votar ahora" debe ser procesado solo por un usuario autenticado, pero el botón también debe mostrarse a anónimo y cuando el usuario anónimo hace clic en él, debe redirigirse a la página de inicio de sesión y el proceso continúa. Para este escenario en particular, ¿hay una condición de acceso especial para mostrar el botón en anónimo? Comentando aquí porque haría que esta publicación sea más completa wiki.
Marcado como
4

La devolución de llamada de acceso es una función que examina si algún usuario tiene algunos permisos. La devolución de llamada de acceso predeterminada es user_access ()

Los argumentos de acceso enumeran los permisos que se examinan mediante devolución de llamada de acceso. por ejemplo, "acceder a contenidos"

Shoaib Nawaz
fuente
¿Para qué más podría ser un valor access callback? Si fuera algo diferente user_access(), ¿obviaría eso la necesidad access arguments?
user1359
2
Lo que quieras. Cualquier función que devuelve VERDADERO o FALSO.
Berdir
Entonces, ¿no lo necesitarías access arguments?
usuario1359
Sí, entonces puedes saltarte
Shoaib Nawaz