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 всегда запрашивает у модулей список всех реализованных разрешений, которые даже не могут быть связаны с узлами; например, есть некоторые модули, которые реализуют только разрешения для своих страниц настроек.

Другие вопросы по тегам