如何限制对节点的直接访问?


12

如何限制对节点的直接访问,而仅允许视图访问特定节点类型的必填字段?

例如,在“视图幻灯片”中,我们正在滑动属于特定节点类型的图像字段。但是我们不希望搜索引擎访问和访问者访问属于该节点类型的节点。

有什么建议?

Answers:


12

一个简单的解决方案是不发布您不想访问的节点。视图仍然可以从那些节点中提取数据。


1
太简单?没有所谓的“太简单的解决方案”。复杂性本身不是目标,不是吗?也许Googletorp的答案并不能解决您的特定问题,但是在那种情况下,您将不得不更加详细地说明原因。
marcvangend 2011年

@marcvangend虽然已经很晚了,但是我已经意识到那不是我的问题的答案。希望有人能提供更好的答案
Fahad Ur Rehman 2012年

@Fahad要获得更好的答案,您需要提出更好的问题。Googletorp的答案对我来说似乎是一个很好的解决方案,支持者似乎也同意。如果仍不能解决您的问题,请进入并编辑您的问题,并添加所有相关详细信息。
marcvangend 2012年

@marcvangend实际上我的问题已解决,我较早接受了答案,但考虑到您的评论。Googletorps享有很高的声誉,无论我接受还是不接受他的回答都不会有任何不同。他提供了一个极好的替代解决方案,对此我也投了赞成票。
Fahad Ur Rehman

@Fahad通过接受一个答案,您正在说:这个答案解决了我的问题。这是一个有力的陈述,对于来访者来说非常有用,它可以找出答案是否有用。如果我的答案不能解决您的问题,那么您应该编辑问题并发布一些详细信息,说明为什么我的解决方案不适合您,并像marcvangend所说的那样,添加更多详细信息。
googletorp

3

如果我们取消发布由user1添加的节点,则即使该用户有权编辑该内容类型的内容,也不能由任何其他用户编辑它们。

限制节点页面视图似乎是一种更好的方式来限制对特定内容类型的任何节点的直接访问。

用法也相当简单,您只需要启用此模块并为通常可以直接访问的节点配置权限即可。

http://drupal.org/project/restrict_node_page_view

从项目页面:

您是否曾经使用过需要发布的幻灯片放映节点类型,但不希望节点本身可以​​使用node / XXX路径进行访问?该模块适合您!

使用此模块,您可以基于节点类型和权限禁用对节点页面(node / XXX)的直接访问。

启用该模块,不要忘记配置您的权限。


1

另一个具有相同功能但功能更多的模块。

兔子洞

该项目的维护者要求“限制节点页面视图”维护者合并问题中的项目。

对抗“限制节点页面视图”的优势:

  • 节点上的主要功能相同,但可扩展为用户/文件/分类法术语
  • 可以在您的模块中使用
  • 可以是全局的内容类型或每个内容
  • 在项目页面上查看更多信息...

不利于“限制节点页面视图”:

  • 更多的代码可能效率更低(需要测试,未经证明)

1

您应该使用node_access(),您可以轻松实现某些选项hook_node_access()。通过实施node_access(),您可以决定谁可以访问节点以及谁可以创建,删除,编辑或更新该节点。但是,视图仍然可以从这些节点中提取数据。

hook_node_access()node_access()


0

https://www.drupal.org/project/restrict_node_page_view的启发,您可以自己编写一个小模块:

/**
 * Implements hook_node_access()
 */
function MYMODULE_node_access($node, $op, $account) {

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}

几年前已经提到过该模块。您能解释一下您的答案给该学科带来了什么新变化吗?
Mołot

@Mołot-...自己编写一个模块。编辑答案。
leymannx

0

使用“ 规则”模块,您可以实现类似于以下内容的规则:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

上面的规则(尚未)未考虑仅将“操作”仅应用于所选角色(例如,以便管理员仍可以使用这些路径来查看节点)。但是对于任何有点熟悉“规则”模块的人来说,这就是添加的直接“条件” ...

要在您自己的站点中试验此规则,只需复制上面的整个“规则”代码,然后将其粘贴到您自己的站点中通过“导入”功能创建的新规则中即可。然后进一步编辑/优化以使其适合您自己的环境(例如,显示“ Sorry,...”消息)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.