1

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',
);
.......
}

任何帮助将不胜感激。

4

2 回答 2

6

通常您不需要自己为内容类型创建权限,因为节点模块会在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()一次性声明它们(因此您不需要任何参数 - 只需为每个权限返回一个字符串)喜欢创作)。

于 2010-06-11T21:36:13.593 回答
1

一般来说,实现多个内容类型的模块将返回它定义的所有权限hook_perm();没有办法知道 Drupal 要求实现的权限是针对哪种内容类型。
Drupal 总是向模块询问所有已实现权限的列表,这些权限甚至与节点无关;例如,有些模块仅对其设置页面实施权限。

于 2010-06-15T19:23:43.733 回答