挂钩烫发不止一种内容类型
Posted
技术标签:
【中文标题】挂钩烫发不止一种内容类型【英文标题】:Hook perm for more than one content type 【发布时间】:2011-03-02 20:43:19 【问题描述】: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',
);
.......
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:通常您不需要自己为内容类型创建权限,因为节点模块会在 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()
中一次性声明它们(因此您不需要任何参数 - 只需返回一个每个您想要创建的权限的字符串)。
【讨论】:
我怎么会错过每个内容的权限字符串可以作为整个字符串返回!非常感谢。【参考方案2】:一般来说,实现多个内容类型的模块将返回其从hook_perm()
定义的所有权限;没有办法知道 Drupal 要求实现的权限是针对哪种内容类型。
Drupal 总是向模块询问所有已实现权限的列表,这些权限甚至与节点无关;例如,有些模块仅对其设置页面实现权限。
【讨论】:
是的,没有办法知道因为 hook_perm 没有像其他钩子一样的任何参数来知道什么节点,正在询问权限。以上是关于挂钩烫发不止一种内容类型的主要内容,如果未能解决你的问题,请参考以下文章