我在Drupal中有权限问题。我希望用户能够创建某种节点类型,但我需要两种不同的路径来赋予他们权限,让他们这样做。类型是由名为isbn2node的模块创建的内容,有两种方法可以通过它创建内容,每种方式都有不同的路径:
?=node/add/isbn2node-book
?=node/add/isbn2node_book/isbn2node
一个有下划线,另一个有连字符。第一条路径指向允许用户手动输入书籍信息的表单;第二个路径允许他们输入ISBN,搜索它,并根据结果填充表单。
我已经在人员菜单中更改了权限,因此他们可以使用第一个路径手动添加isbn2node-book内容,但是没有选项让他们使用第二个方法。对URL进行别名以使其在路径中没有node/add
也不起作用。
创建重复的内容类型似乎是一个丑陋的解决方案;是否有更优雅的方式让用户访问第二条路径?
答案 0 :(得分:0)
使用hook_node_access的自定义模块中的一小段代码应该这样做。
$ node是节点对象或要在其上执行访问检查的内容类型的计算机名称(如果正在创建节点,则$ node对象不可用,因此它将是字符串)。 / p>
所以这应该这样做:
function MY_MODULE_node_access($node, $op, $account) {
if ($op == 'create') {
$type = $node;
if($type == 'book' && $account->uid) return NODE_ACCESS_ALLOW;
}
}
答案 1 :(得分:0)
我想出来了,我遇到的问题是针对这种内容类型的。 ISBN2Node模块要求用户拥有管理节点权限以使用其查找和批量导入功能。
模块的hook_permission和hook_menu部分有一些额外的代码作为模块的issues thread中的修复提交。