Hook Perm для более чем одного типа контента
Drupal 6.x
У меня есть этот модуль, который управляет четырьмя различными типами контента. В связи с этим, как мне определить разрешение для каждого контента в том же модуле? Это вообще возможно? Я не могу понять, как определить разрешение для каждого типа контента, потому что имя_узла hook_perm должно быть названо с именем модуля, и у него нет аргумента (например, hook_access $node) для возврата базы разрешений для типа контента. Вот как я хотел бы сделать -
function mymodule_perm()
{
if(content1)
return array(
'create content1 node',
'edit content1 nodes',
'delete content1 nodes',
);
if(content2)
return array(
'create content2 node',
'edit content2 nodes',
'delete content2 nodes',
);
if(content3)
return array(
'create content3 node',
'edit content3 nodes',
'delete content3 nodes',
);
.......
}
Любая помощь будет высоко оценен.
2 ответа
Обычно вам не нужно создавать разрешения для типов контента самостоятельно, так как модуль узла делает это для вас в node_perm()
, Для каждого типа контента, который вы объявляете в hook_node_info()
модуль узла автоматически создаст фиксированный набор разрешений следующим образом:
$perms[] = 'create '. $name .' content';
$perms[] = 'delete own '. $name .' content';
$perms[] = 'delete any '. $name .' content';
$perms[] = 'edit own '. $name .' content';
$perms[] = 'edit any '. $name .' content';
Кроме того, вы можете объявить любое количество дополнительных разрешений в ваших модулях. hook_perm()
реализации (если они уникальны) и использовать их в своем коде по своему усмотрению.
Здесь важно то, что разрешение само по себе мало что делает - это просто имя, которое будет отображаться на странице разрешений, позволяя приписывать его ролям. Они становятся "осмысленными" только благодаря коду, который использует их через user_access()
звонки.
Поэтому, если, например, вы хотите создать специальное новое разрешение для каждого типа контента самостоятельно, вы просто объявите их в hook_perm()
все сразу (поэтому вам не нужны никакие аргументы - просто верните одну строку для разрешения, которое вы хотите создать).
Вообще говоря, модуль, реализующий более одного типа контента, вернет все разрешения, которые он определяет hook_perm()
; нет способа узнать, для какого типа контента Drupal запрашивает реализованные разрешения.
Drupal всегда запрашивает у модулей список всех реализованных разрешений, которые даже не могут быть связаны с узлами; например, есть некоторые модули, которые реализуют только разрешения для своих страниц настроек.