Добавьте пользовательское разрешение к определенному модулю "группа" на странице разрешений
Используя пользовательский модуль, как можно добавить разрешение в "группу" основного/внесенного модуля на странице разрешений без взлома основного/внесенного модуля?
Пример:
3 answers
Как уже было сказано, было бы не очень хорошей идеей перечислять разрешения, реализованные модулем, вместе с разрешениями, реализованными другим модулем; пользователям было бы трудно найти разрешения, реализованные, например, custom_module.module, когда они перечислены вместе с разрешениями, реализованными user.module.
Если вам действительно нужно изменить порядок, используемый для перечисления разрешений (но тогда действительно ли это необходимо), то я бы предложил изменить способ отображения списка показаны разрешения: вместо того, чтобы перечислять их на основе реализующего его модуля, вы могли бы перечислить их на основе разных критериев.
Для этого вам потребуется:
- Реализуйте функцию hook_theme_registry_alter(), чтобы изменить функцию темы, вызываемую при вызове
theme('user_admin_perm')
. - Реализуйте свою функцию темы, глядя на код theme_user_admin_perm().
Стоит ли это делать? Это может быть, в зависимости от вашего клиента.
Учитывая, что был выпущен первый официальный релиз для Drupal 7, и код для Drupal 7 изменится, вероятно, не стоит этого делать. Я бы предпочел попытаться понять, почему клиент хочет изменить порядок разрешений, перечисленных на странице администрирования, и объяснить причину, по которой его изменение является плохой идеей; если клиент настаивает на том, что код должен быть реализован для их собственных целей, то я бы дал ему понять, что код должен быть переписан, когда сайт перейдет на Drupal 7, и не стоит тратить время на такие изменения, когда можно использовать то же время для реализации чего-то, что действительно необходимо.
Нет hook_perm_alter, и эти разрешения сгруппированы по модулю, поэтому, скорее всего, вход туда будет осуществляться с помощью hook_form_alter в этих формах (есть формы разрешений для каждой роли вместе с основной; не уверен, используют ли они один и тот же form_id).
Все равно следует определить разрешение через yourmodule_perm, чтобы все остальное могло знать, что разрешение существует.
Лично я бы не советовал этого делать; пусть ваше разрешение будет там, где оно будет, чтобы не было "Я установил этот модуль и не могу найти разрешение! о, почему разрешение было под другим модулем?!!"
Есть два способа выполнить то, о чем вы просите.
Либо через hook_form_alter
, либо путем переопределения функции темы формы: theme_user_admin_perm
.
Для стандартного модуля contrib это не было бы хорошей идеей, так как люди, как правило, ищут разрешение модуля, просматривая его имя. Если ваш модуль вносит некоторые изменения в стандартный поток разрешений пользователя, было бы неплохо показать добавленное разрешение вместе с разрешениями по умолчанию из пользовательского модуля.