Drupal用户权限&;奇数内容类型

Drupal用户权限&;奇数内容类型,drupal,permissions,drupal-7,Drupal,Permissions,Drupal 7,我在Drupal中有权限问题。我希望用户能够创建特定的节点类型,但我需要为他们提供两种不同的路径,以便他们能够这样做。该类型是由名为isbn2node的模块创建的内容,有两种方法可以通过它生成内容,每种方法都有不同的路径: ?=node/add/isbn2node-book ?=node/add/isbn2node_book/isbn2node 一个有下划线,另一个有连字符。第一条路径指向一个表单,该表单允许用户手动输入书本上的信息;第二条路径允许他们输入ISBN,搜索ISBN,并根据结果填

我在Drupal中有权限问题。我希望用户能够创建特定的节点类型,但我需要为他们提供两种不同的路径,以便他们能够这样做。该类型是由名为isbn2node的模块创建的内容,有两种方法可以通过它生成内容,每种方法都有不同的路径:

?=node/add/isbn2node-book

?=node/add/isbn2node_book/isbn2node
一个有下划线,另一个有连字符。第一条路径指向一个表单,该表单允许用户手动输入书本上的信息;第二条路径允许他们输入ISBN,搜索ISBN,并根据结果填充表格

我已经更改了“人员”菜单中的权限,以便他们可以使用第一个路径手动添加isbn2node图书内容,但没有允许他们使用第二个方法的选项。为url添加别名,使其在路径中没有
节点/add
,也不起作用


创建重复的内容类型似乎是一个丑陋的解决方案;有没有更优雅的方式让用户访问第二条路径

在自定义模块中使用一点代码就可以了

$node是要对其执行访问检查的内容类型的节点对象或计算机名称(如果正在创建节点,则$node对象不可用,因此它将改为字符串)

因此,这应该做到:

function MY_MODULE_node_access($node, $op, $account) {
    if ($op == 'create') {
        $type = $node;
        if($type == 'book' && $account->uid) return NODE_ACCESS_ALLOW;
    }
}

我发现了这一点,我遇到的问题都是针对这种内容类型的。ISBN2Node模块要求用户具有“管理节点”权限才能使用其查找和批量导入功能


模块的hook_权限和hook_菜单部分在模块的

$account->uid位只是确认用户如果登录了inThanks!这听起来是个不错的解决方案。第一次快速尝试实现它时,我遇到了一个错误:
注意:尝试获取非对象的属性
。。。但我很确定这是我的错;我回家后会进行故障排除并报告。我已经更新了答案-$op创建时,$node不是对象。我找到了答案!您的代码适用于我的站点上的所有其他内容类型,但事实证明,此特定模块的设置是为了让用户需要“管理节点”权限来运行第二条路径发送给他们的自定义搜索。我已链接到下面的修复程序。谢谢-我了解了hooks&PHP如何解决这个问题。读了这篇文章,我想说一个更好的解决方案可能是在您自己的模块中使用hook\u menu\u alter,而不是对isbn模块进行更改。这样一来,如果isbn模块更新,您的更改不会丢失。