用户如何只能访问一个特定节点,而不能访问该类型的所有节点?


10

我有一个对特定内容类型具有查看和编辑权限的用户。这赋予所有用户查看和编辑该类型的所有节点的特权。但是实际上,我想为每个用户创建一个唯一的节点,以便只有该用户才能查看和编辑它。我如何在Drupal 7中做到这一点?


1
您是说如何使用模块来做到这一点,还是要编写必要的代码来做到这一点?
kiamlaluno

另一种方法是拒绝节点使用并按字段扩展用户配置文件。
ya.teck 2011年

听起来每个用户的此节点可能会满足某种用户配置文件要求。它必须是一个单独的节点,还是用附加字段扩展用户实体本身会更好吗?
阿尔弗雷德·阿姆斯特朗

Drupal 7删除了每个用户的节点查看权限。您可以使用此模块将它们带回drupal.org/project/node_view_permissions
giorgio79 2013年

使用模块“ nodeaccess”链接是drupal.org/project/nodeaccess,我希望它能对您有所帮助
Mahipal Purohit13年

Answers:


11

使用现有模块,您可以使用Content Access做到这一点,该工具(与ACL一起使用时)允许为每个用户设置访问节点的权限。
这意味着您需要为每个节点手动设置访问权限。

如果您手动创建节点,然后要确保只有被设置为节点所有者的用户才能查看(和编辑)该节点,则可以创建一个自定义模块(即用于您的网站),并按以下方式实现hook_node_access()(已编写代码以使其更易于阅读):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

使用此挂钩实现,您无需手动编辑为您创建的该内容类型的每个节点提供的访问权限。更改节点的所有者也将更加容易,因为您无需更改该节点的访问权限。该代码将自动向设置为节点所有者(或作者)的用户授予更新和查看权限。


5

您不需要任何特殊的模块或自定义代码即可执行此操作。只需手动创建这些节点,将适当的用户设置为节点的所有者(作者),并为此内容类型设置权限即可仅编辑自己的内容(而不编辑此类型的任何内容),即可完成操作。


1

您正在谈论的是Drupal节点访问控制,这是一个巨大的主题。

内核对节点访问控制的内置支持是很自然的,要控制访问以按角色查看节点,必须使用某种类型的节点访问控制模块。在Drupal.org上有一个页面,列出了所有节点访问模块,并对每个模块进行了囊式审查。我建议您看一下该页面,看看是否可以找到合适的模块来控制访问。

的Flexi访问模块似乎是最匹配你的要求,因为它的模块主要功能是让你控制个别用户的访问,而不是通过角色或分类项。

这是一个小模块,可让您为单个用户设置ACL(访问控制列表)。它基本上是ACL模块的用户界面,因此您也需要安装它。

它缺少一些更高级的访问控制模块的功能,例如Content Access,但是它得到了积极维护,并且在其发布队列中目前没有任何打开的错误。

披露:我是Flexi Access的维护者。

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.