Restringindo alterações de bloco

Respostas:

6

No Drupal, apenas os usuários com permissão para administrar blocos podem alterar as configurações do bloco, incluindo a região em que o bloco está atribuído.

Até onde eu sei, não existem módulos que permitam atribuir aos usuários uma permissão mais granular. Você deve escrever seu próprio módulo personalizado que mostra apenas os campos que um usuário tem permissão para editar.

Por exemplo, o código a seguir alteraria a criação do formulário a partir de block_admin_configure () , a função que cria o formulário de configuração para qualquer bloco, para permitir aos usuários com a permissão "editar títulos do bloco" editar o título do bloco.

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

A função é a implementação de hook_form_FORM_ID_alter () feita para um módulo chamado mymodule.module.

Os campos para as configurações da região (as regiões temáticas em que um bloco é produzido) estão contidos $form['regions']; O conjunto de campos contém um campo de seleção para cada um deles ativado.
Para mostrar o campo definido apenas para usuários com a permissão "editar regiões de bloco", você pode usar o código a seguir, por exemplo.

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

Os usuários com permissão para administrar blocos podem alterar a região atribuída aos blocos em http://example.com/admin/structure/block . Para não permitir que o usuário sem a permissão "editar regiões de bloco" acesse essa página, altere o manipulador de acesso desse menu e substitua o manipulador de acesso padrão por um manipulador de acesso padrão por um personalizado que retornaria FALSEquando os usuários não tiverem essa permissão.
Para mais informações, consulte hook_menu e hook_menu_alter () .

kiamlaluno
fonte
5

Veja o módulo Block Access .

Este módulo adiciona um conjunto de permissões globais para criar, visualizar, mover, ativar, desativar e configurar blocos, bem como permissões no nível individual.

kiamlaluno
fonte
0

Depois de voltar a essa questão depois de um ano ou mais, existem dois métodos muito simples.

Crie um bloco e coloque o seguinte código no corpo do bloco:

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

Ou você pode criar um bloco de visualização e filtro no ID do nó.

Agora você concede a alguém permissão para editar o tipo de conteúdo, mas não a permissão para criá-lo ou excluí-lo.

JM01
fonte
0

Uma solução simples que eu recomendaria é verificar o módulo Boxes . Este módulo fornecerá boas opções de edição em linha (via AJAX) para blocos, o que tornaria super fácil para os editores alterar o texto nos blocos. As permissões ainda precisariam ser "administrar blocos" para os editores, mas como agora eles poderão editar blocos inline, não há realmente necessidade de eles chegarem à página de configuração de blocos.
Agora, se você ainda insistir em remover o acesso a essa página de configuração de bloco, basta fazer uma alteração simples no menu que altera a permissão necessária para a página de configuração de bloco, como o código a seguir.

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');
}
ericduran
fonte
0

O módulo Bean é uma alternativa possível para responder a essa pergunta. Aqui está uma citação sobre a página do projeto:

Pense em um Bean como um método para fornecer novos tipos (em comparação com o nó, esse seria um tipo de conteúdo), que fornece uma interface de adição de conteúdo para criar quantos blocos forem necessários (veja a captura de tela abaixo). O conteúdo do bean pode ser colocado no site como qualquer outro bloco.

Combinado com as opções disponíveis para conceder as permissões apropriadas de Bean , ele deve oferecer muita flexibilidade sobre como exatamente você deseja usar esse (ótimo) módulo em seu caso específico: para cada bloco individual criado com o módulo BEAN, você pode usar a página Permissões típica (em admin/people/permissions) para conceder acesso Adicionar / Editar / Exibir / Excluir às funções selecionadas.

Este módulo também funciona muito bem em combinação com os módulos UUID e UUID Features Integration . E depois que você se familiarizar com o módulo Bean, poderá encontrar outros casos em seu site em que também deseja usar esse módulo (que de alguma forma compensa o fato de que você precisa adicionar outro módulo).

O tutorial em vídeo do módulo Drupal Bean - usando a interface do usuário Admin do Bean fornece uma ótima introdução para realmente entender o poder deste módulo e o tipo de coisa que você pode fazer com ele (usando apenas técnicas de criação de sites, sem codificação personalizada envolvida). Também mostra como o módulo Bean transforma os blocos do Drupal em entidades que podem ser colocadas em campo.

Este módulo foi iniciado apenas a partir do D7 (devido às "entidades" obviamente introduzidas no D7) e já possui mais de 22 mil instalações relatadas. Aqueles que ainda não o utilizam devem definitivamente começar a vê-lo em preparação para um dia de atualização para o D8. Porque é isso que é mostrado atualmente em sua página do projeto (adicionei a marcação em negrito aqui):

Este módulo foi incluído no núcleo do Drupal 8 . Consulte este problema para obter mais informações.

Pierre.Vriens
fonte