it-swarm-es.com

Restricción de cambios de bloque

¿Cómo puede permitir que un editor edite el texto en un bloque, pero no realice otros cambios de configuración, como mover el bloque de una región a otra?

7
JM01

Después de volver a esta pregunta después de aproximadamente un año, hay dos métodos que son muy simples.

Cree un bloque y coloque el siguiente código en el cuerpo del bloque:

<?php
$node = node_load(77);//77 is the nid of the node I want to put in the block.
$node_content = node_view($node,"full");
print render($node_content);
?>

O puede crear un bloque de vista y filtrar en la identificación del nodo.

Ahora le das permiso a alguien para editar el tipo de contenido pero no permiso para crearlo o eliminarlo.

0
JM01

En Drupal, solo los usuarios con permiso para administrar bloques pueden cambiar la configuración del bloque, incluida la región asignada al bloque.

Hasta donde yo sé, no hay módulos que permitan asignar a los usuarios un permiso más granular. Debe escribir su propio módulo personalizado que muestre solo los campos que un usuario puede editar.

Por ejemplo, el siguiente código alteraría la construcción del formulario desde block_admin_configure () , la función que construye el formulario de configuración para cualquier bloque, para permitir a los usuarios con el permiso "editar títulos de bloque" editar el bloque título.

function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
  if (isset($form['settings']['title'])) {
    $form['settings']['title']['#access'] = user_access('edit block titles');
  }
}

La función es la implementación de hook_form_FORM_ID_alter () hecha para un módulo llamado mymodule.module.

Los campos para la configuración de la región (las regiones temáticas de salida de un bloque) están contenidos en $form['regions']; El conjunto de campos contiene un campo de selección para cada uno de ellos habilitado.
Para mostrar el campo configurado solo para usuarios con el permiso "editar regiones de bloque", puede usar el siguiente código, por ejemplo.

function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
  if (isset($form['regions'])) {
    $form['regions']['#access'] = user_access('edit block regions');
  }
}

Los usuarios con permiso para administrar bloques pueden alterar la región asignada a los bloques de http://example.com/admin/structure/block . Para no permitir que el usuario sin el permiso "editar regiones de bloque" acceda a esa página, debe modificar el controlador de acceso de ese menú y reemplazar el controlador de acceso predeterminado por uno personalizado que devolvería FALSE cuando los usuarios no No tengo ese permiso.
Para obtener más información, consulte hook_men y hook_menu_alter () .

6
kiamlaluno

Vea el módulo Acceso de bloque .

Este módulo agrega un conjunto de permisos globales para crear, ver, mover, habilitar, deshabilitar y configurar bloques, así como permisos a nivel de bloque individual.

5
user842

El módulo Bean es una posible alternativa para responder esta pregunta. Aquí hay una cita sobre la página de su proyecto:

Piense en un Bean como un método para proporcionar nuevos tipos (en comparación con el nodo, este sería un tipo de contenido) que luego proporciona una interfaz de agregar contenido para crear tantos bloques como necesite (vea la captura de pantalla a continuación). El contenido del bean se puede colocar alrededor del sitio como cualquier otro bloque.

Combinado con las opciones disponibles para otorgar los permisos de Bean apropiados , debería darle mucha flexibilidad sobre cómo exactamente quiere usar este (excelente) módulo en su caso específico: para cada bloque individual creado con el módulo BEAN, puede usar la página típica Permisos (en admin/people/permissions) para otorgar Agregar/Editar/Ver/Eliminar acceso a roles seleccionados.

Este módulo también funciona muy bien en combinación con los módulos UUID y Integración de características UUID . Y después de familiarizarse con el módulo Bean, es posible que encuentre otros casos en su sitio en los que también desee utilizar este módulo (que de alguna manera compensa el hecho de que necesita agregar otro módulo).

El video tutorial tutorial del módulo Drupal Bean - usando Bean Admin UI proporciona una gran introducción para comprender realmente el poder de este módulo, y el tipo de cosas que puede hacer con él (solo usando técnicas de construcción del sitio, sin codificación personalizada involucrada). También muestra cómo el módulo Bean transforma los bloques Drupal) en entidades confiables.

Este módulo solo comenzó a partir de D7 (debido a las "entidades", por supuesto, que solo se introdujeron en D7), y ya cuenta con más de 22K instalaciones informadas. Aquellos que aún no lo usan definitivamente deberían comenzar a mirarlo en preparación para algún día actualizar a D8. Porque esto es lo que se muestra actualmente en su página de proyecto (agregué el marcado en negrita aquí):

Este módulo se ha incluido con Drupal 8 core . Consulte este número para obtener más información información.

0
Pierre.Vriens

Una solución simple que recomendaría es revisar el módulo Cajas . Este módulo proporcionará opciones de edición en línea de Niza (a través de AJAX) para bloques, lo que facilitaría mucho a los editores cambiar el texto en los bloques. Los permisos aún tendrían que ser "administrar bloques" para los editores, pero como ahora podrán editar bloques en línea, realmente no es necesario que lleguen a la página de configuración de bloques.
Ahora, si aún insiste en eliminar el acceso a esa página de configuración de bloque, puede hacer un simple cambio de menú que cambie el permiso requerido para la página de configuración de bloque, como el siguiente código.

function hook_menu_alter(&$items) {
  //Example Use Case, switching permission from "administer block" to "administer site configuration"
  $items['admin/structure/block']['access arguments'] = array('administer site configuration');
}
0
ericduran