Drupal меню разрешений вопрос - PullRequest
0 голосов
/ 08 апреля 2010

Я создаю модуль администрирования для моего клиента, который дает им доступ к некоторым функциям администрирования, касающимся их содержимого.Я начинаю с добавления некоторых разрешений в мой модуль, реализуя hook_perm:

function mymodule_perm() 
{
    return array(
        'manage projects',
    );
}

. Затем я могу создать свое меню, добавив в уже существующий раздел admin :

function mymodule_menu() 
{
    $items['admin/projects'] = array(
        'title' => 'Projects',
        'description' => 'Manage your projects.',
        'page callback' => 'manage_projects_overview',
        'access callback' => 'user_access',
        'access arguments' => array('manage projects'),
        'type' => MENU_NORMAL_ITEM,
        'weight' => -100,
    );

    $items['admin/projects/add'] = array(
        'title' => 'Add project',
        'access arguments' => array('manage projects'),
        'page callback' => 'mymodule_projects_add',
        'type' => MENU_NORMAL_ITEM,
        'weight' => 1,
    );

    return $items;
}

Это добавит раздел Проекты в область администрирования с подразделом Добавить проект .Все хорошо.

Я хочу, чтобы мой клиент мог видеть раздел «Проекты» только при входе в систему. Для этого я поставил галочку в разрешении «управлять проектами» для аутентифицированных пользователей в разделе разрешений моего раздела.модуль.Теперь, чтобы предоставить моему клиенту фактический доступ к области администрирования, мне также нужно отметить «доступ к страницам администрирования» в разделе «системный модуль» в разделе разрешений пользователей.Это прекрасно работает, когда я вхожу в систему как мой клиент, я вижу только раздел Projects в области администрирования.Однако есть одна вещь: в моем меню навигации, показанном в левом столбце, я вижу следующие элементы:

- Administer
   - Projects
   - Content management
   - Site building
   - Site configuration
   - User management

Я ожидал только элементы «Администрирование» и «Проекты», а не другие.Когда я нажимаю, например, «Управление контентом», я получаю титульную страницу «Управление контентом» без подразделов.То же самое для создания сайта, конфигурации сайта и управления пользователями.Что действительно странно, так это то, что отчеты не отображаются, что также является разделом администрирования верхнего уровня.

Почему отображаются эти другие элементы, кроме раздела «Мои проекты», и как я могу заставить их перестать появляться, если я »я не вошел в систему как администратор?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2010

Ваша проблема в том, что им разрешено просматривать эти страницы.

Из системного модуля hook_menu:

$items['admin/build'] = array(
  'title' => 'Site building',
  'description' => 'Control how your site looks and feels.',
  'position' => 'right',
  'weight' => -10,
  'page callback' => 'system_admin_menu_block_page',
  'access arguments' => array('access administration pages'),
  'file' => 'system.admin.inc',
);

Итак, когда вы дали им access administration pages, вы дали им доступ к разделу создания сайта, но не к любому элементу в нем. Быстрый способ решить эту проблему:

  • Используйте hook_menu_alter, чтобы изменить настройки доступа для этих пунктов меню на те, к которым у них нет доступа. Либо создайте собственную перми, либо используйте уже существующую.
  • Вы также можете использовать свою тему, чтобы просто скрыть предметы.
1 голос
/ 08 апреля 2010

Я не уверен точно, почему меню маршрутизатор отображает их. Но я могу помочь ...

Почему бы вам не изменить свой путь на что-то вроде:

projects/add  
projects/%/edit

Это похоже на хук меню модуля узла. Возможно, это не совсем то, что вы ищете, но если вы не хотите, чтобы эти пользователи имели доступ к административным ресурсам, это может быть правильным способом.

...