Крюк Пермь для более чем одного типа контента
-
26-09-2019 - |
Вопрос
Drupal 6.x.
У меня есть этот модуль, который управляет четырьмя различными типами контента. В этом отношении, как я могу определить разрешение на каждый контент в одном модуле? Это даже возможно? Я не могу понять, как определить разрешение для каждого типа содержимого CUZ Cook_Perm должен быть назван именем модуля, и у него нет никакого аргумента (например, Cook_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',
);
.......
}
Любая помощь будет высоко ценится.
Решение
Обычно вам не нужно создавать разрешения для самих типов контента, поскольку модуль узла делает это для вас в 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 всегда просит модули список всех реализованных разрешений, которые даже не могли быть связаны с узлами; Существуют некоторые модули, которые реализуют только разрешения для их настройки страниц.