如何在Drupal中创建自定义访问函数来编辑节点类型?

时间:2010-11-19 22:33:05

标签: drupal drupal-6 drupal-modules

我有一个节点类型,只有在超出其角色权限的特定情况下才能由用户编辑。我在自定义模块中这样做。

我想删除甚至可以看到编辑标签的功能,而不仅仅是在表单中添加验证功能,以便在提交表单后提醒用户。

我需要添加某种访问功能。有谁知道怎么做?

提前致谢。

- 更新 -

我现在有两种方法可行。

1)使用hook_nodeapi:

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch($op) {
    case 'prepare':
      if(!mymodule_access_function($node)) {
        $_REQUEST['destination'] = 'my_access_denied_page';
        // rest of function

2)我可以使用hook_menu_alter将访问回调函数插入到菜单项中。

就我的目的而言,2更有意义。我想我会拼出(1)的代码,因为这是在这个页面上给出的答案并且它有效。

2 个答案:

答案 0 :(得分:3)

对于选项卡可见性,您可以更改从模块挂钩到主题模板或css补丁的任何位置的主题输出。根据数据可见性和性能问题的要求,某些解决方案比其他解决方案更好。我们需要更多关于您需要什么样的处理的细节。

要进行访问, hook_nodeapi() $ op 'prepare',此时针对$ node运行您的自定义代码,并决定你想做什么(如果没有要求,或者访问被拒绝的页面,重定向到另一个表单)。

编辑:重定向通常使用 $ _ REQUEST ['destination'] ='destination / alias' (不会中断执行),有时 drupal_goto( 'destination / alias') (中断执行)是合适的,但通常不起作用。请在项目中跟踪重定向,因为在多种逻辑条件下,您可能会遇到不必要且难以调试的行为。

答案 1 :(得分:1)

每个内容类型在admin/user/permissions中都有默认权限设置,用于创建,编辑,删除节点。您可以分配给匿名或经过身份验证的用户。如果要分配给组,则创建另一个角色并分配如上所述的权限。