Настройки отображения блока с помощью hook_permission

Главные вкладки

Аватар пользователя Golum Golum 3 февраля 2018 в 15:48

Здравствуйте уважаемые форумчане.
У меня возникла такая проблема:нужно реализовать отображение созданного с помощью hook_block_info и hook_block_view.
Реализовать отображение этого блока надо с помощью hook_permission.
Гугл толком ничего не выдает именно по настройке отображения блока,выдает почему то на настройку отображения страниц через hook_menu.
Нашел такое решение:

<?php/**
 * Implements hook_permission().
 */
function my_module_permission() {
  return [
    'my_module_custom_permission' => [
      'title' => t('My Module Custom Permission'),
      'description' => t('Explain what this permission allows the user to do.'),
    ],
  ];
}

/**
 * Implements hook_menu_alter().
 */
function my_module_menu_alter(&$items) {
  $items['admin/structure/block/manage/block/5/configure']['access arguments'] = ['my_module_custom_permission'];?>

Но и оно не хочет работать.
Подскажите пожалуйста что я не так делаю,знающие люди .

Лучший ответ

Аватар пользователя ivnish ivnish 3 февраля 2018 в 16:22
1

Ну в принципе ничего сложного. Создаете permission, а потом в hook_block_view проверяете:

<?php
if (!user_access('YOUR PERMISSION')) {
  
$block['content'] = 'sorry, access denied';
}
?>

Комментарии

Аватар пользователя Golum Golum 3 февраля 2018 в 16:07

Да,но дело в том что это мое обучающее задание )
Хотелось бы выполнить его так как от меня требуется.

Аватар пользователя Semantics Semantics 3 февраля 2018 в 16:07

Нагугленное решение не хочет работать потому что там:
а. управление доступом для редактирования блока
б. не весь код есть

Аватар пользователя Golum Golum 3 февраля 2018 в 16:10

В решении утверждалось что именно этот путь надо указывать.
Хотя там была вроде как поправка на то что такой путь надо указывать для тех блоков которые были созданы классически через Структура/Блоки/Добавить блок.

Аватар пользователя Golum Golum 3 февраля 2018 в 16:15

1. hook_menu
Создать собственную страницу, в дальнейшем будет главной вашего сайта, а также создать страницы "403"
и "404", изменить адреса этих страниц в системных настройках сайта.
2. hook_block_info & hook_block_view
Создать блок, в котором будет выводиться произвольный текст, также блок должен иметь заголовок.
Блок должен выводиться на каждой странице сайта.
3. hook_permission
Создать доступ, который будет контролировать просмотр контента в предварительно созданном блоке.
Если определенный пользователь имеет доступ, тогда отображать текст что есть в блоке, если доступ отсутствует, тогда
писать надпись "access to view this content is denied.".

Аватар пользователя ivnish ivnish 3 февраля 2018 в 16:22
1

Ну в принципе ничего сложного. Создаете permission, а потом в hook_block_view проверяете:

<?php
if (!user_access('YOUR PERMISSION')) {
  
$block['content'] = 'sorry, access denied';
}
?>
Аватар пользователя Golum Golum 3 февраля 2018 в 16:33

Спасибо вам)
Это и вправду просто!
Мне как начинающему немного сложно пока что разобраться с родными функциями Drupal )
Благодаря вам я смог разобраться,в этом )

Стыдно что сам не разобрался

Аватар пользователя Golum Golum 6 февраля 2018 в 21:03

Данная тема закрыта,но мне хотелось бы еще спросить у вас какая функция(по типу user_access) будет проводить проверку в Drupal 8?
Там permission реализуется через yml и все совсем по другому в связи с чем у меня опять возникли трудности )

Аватар пользователя Golum Golum 3 февраля 2018 в 16:18

Вчера целый день убил ,пробовал совершенно разные пути.
От testblock до пути редактирования блока.
Самое интересное что со страничками данный код работает.
А вот с блоками нет(пробовал и на родных блоках Drupal).
Не могли бы вы подсказать какой путь будет правильным и что мне надо дописать в коде?