Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

hook_permission Permisos de acceso de Drupal 7 para diferentes roles

11/05/2025, by Ivan

En las lecciones anteriores mostramos cómo crear páginas y bloques en diferentes ubicaciones del sitio, y también usamos las propiedades 'access arguments' y 'access callback' para controlar el acceso. En esta lección aprenderemos a definir permisos más flexibles a través de una interfaz administrativa. Para ello, usaremos el hook hook_permission() (en Drupal 6 se llamaba hook_perm()).

hook_permission()

Este hook define permisos para los usuarios.

Con él, tu módulo puede declarar nuevos permisos que se mostrarán en la página de administración de permisos. También se usa para controlar el acceso total o parcial a las acciones del módulo.

Los permisos se verifican con la función user_access().

Valores de retorno

Devuelve un array donde la clave es el nombre interno del permiso, y el valor es un array asociativo con las siguientes claves:

  • title: Nombre legible del permiso (usar t() para que sea traducible).
  • description (opcional): Descripción del permiso (también usar t()).
  • restrict access (opcional): Booleano que indica si solo debe asignarse a usuarios de confianza (por defecto: FALSE).
  • warning (opcional): Mensaje de advertencia personalizado que sobrescribe el mensaje por defecto generado por restrict access.

Ejemplo: Añadimos este hook al código del módulo del ejemplo anterior:

function sitemade_permission() {
  return array(
    'view page example' => array(
      'title' => t('View page example'),
      'description' => t('View simple page example'),
    ),
  );
}

Y actualizamos el hook_menu() para usar este permiso:

function sitemade_menu() {
  $items = array();
  $items['admin/config/content/page_example'] = array(
    'title' => 'Página de ejemplo',
    'description' => 'Una página sencilla',
    'page callback' => '_page_example',
    'access arguments' => array('view page example'),
  );
  return $items;
}

La función de contenido no cambia:

function _page_example($content = NULL) {
  $content = '';
  $query = db_select('node_revision', 'n');
  $query->innerJoin('field_revision_body', 'b', 'b.revision_id = n.vid');
  $query->innerJoin('node', 'd', 'n.nid = d.nid');
  $query->fields('n', array('title', 'nid', 'vid'));
  $query->fields('b', array('body_value'));
  $query->condition('d.type', 'news');
  $query->orderBy('n.timestamp', 'DESC');
  $query->range(0, 10);
  $result = $query->execute();
  while ($nodes = $result->fetch()) {
    $content .= '

' . $nodes->title . '

'; $content .= $nodes->body_value; } return $content; }

Ahora, en la página de permisos admin/people/permissions, veremos un nuevo permiso:

Drupal add permission

Asignamos este permiso solo al administrador, para que los usuarios normales no puedan acceder a la página. Si un usuario sin permiso intenta acceder a admin/config/content/page_example, recibirá un error 403 (acceso denegado).

En la próxima lección crearemos una página de administración con un formulario de configuración para nuestro sitio utilizando la Drupal Forms API.