Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top