Добавьте пользовательское разрешение к определенному модулю "группа" на странице разрешений


Используя пользовательский модуль, как можно добавить разрешение в "группу" основного/внесенного модуля на странице разрешений без взлома основного/внесенного модуля?

Пример:
Add custom permission to core module

 1
Author: kiamlaluno, 2011-03-14

3 answers

Как уже было сказано, было бы не очень хорошей идеей перечислять разрешения, реализованные модулем, вместе с разрешениями, реализованными другим модулем; пользователям было бы трудно найти разрешения, реализованные, например, custom_module.module, когда они перечислены вместе с разрешениями, реализованными user.module.

Если вам действительно нужно изменить порядок, используемый для перечисления разрешений (но тогда действительно ли это необходимо), то я бы предложил изменить способ отображения списка показаны разрешения: вместо того, чтобы перечислять их на основе реализующего его модуля, вы могли бы перечислить их на основе разных критериев.
Для этого вам потребуется:

Стоит ли это делать? Это может быть, в зависимости от вашего клиента.
Учитывая, что был выпущен первый официальный релиз для Drupal 7, и код для Drupal 7 изменится, вероятно, не стоит этого делать. Я бы предпочел попытаться понять, почему клиент хочет изменить порядок разрешений, перечисленных на странице администрирования, и объяснить причину, по которой его изменение является плохой идеей; если клиент настаивает на том, что код должен быть реализован для их собственных целей, то я бы дал ему понять, что код должен быть переписан, когда сайт перейдет на Drupal 7, и не стоит тратить время на такие изменения, когда можно использовать то же время для реализации чего-то, что действительно необходимо.

 3
Author: kiamlaluno, 2011-03-15 20:08:40

Нет hook_perm_alter, и эти разрешения сгруппированы по модулю, поэтому, скорее всего, вход туда будет осуществляться с помощью hook_form_alter в этих формах (есть формы разрешений для каждой роли вместе с основной; не уверен, используют ли они один и тот же form_id).

Все равно следует определить разрешение через yourmodule_perm, чтобы все остальное могло знать, что разрешение существует.

Лично я бы не советовал этого делать; пусть ваше разрешение будет там, где оно будет, чтобы не было "Я установил этот модуль и не могу найти разрешение! о, почему разрешение было под другим модулем?!!"

 2
Author: hefox, 2011-03-14 18:06:47

Есть два способа выполнить то, о чем вы просите.

Либо через hook_form_alter, либо путем переопределения функции темы формы: theme_user_admin_perm.

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

 1
Author: googletorp, 2011-03-14 18:58:30