我有一个用户具有视图和编辑特定内容类型的权利。这赋予所有用户的特权,以查看和编辑该类型的所有节点。但是实际上,我想为每个用户创建一个唯一的节点,以便只有该用户可以查看和编辑它。我该如何在Drupal 7中执行此操作?

有帮助吗?

解决方案

使用现有模块,您可以使用 内容访问, ,(当一起使用时 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;
}

使用此挂钩实现,您无需手动编辑您创建该内容类型的每个节点给出的访问权限。更改节点的所有者也会更容易,因为您不需要更改该节点的访问权限;该代码将自动授予更新,并将权限视为该节点的所有者(或作者)。

其他提示

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

您所说的是Drupal节点访问控制,这是一个巨大的主题。

Core对节点访问控制的内置支持是相当的课程,并且要控制按角色查看节点的访问,则必须使用某种节点访问控制模块。有一个 页面drupal.org列出所有节点访问模块, ,对每个胶囊进行审查。我建议您查看该页面,看看是否可以找到合适的模块来控制访问。

Flexi访问 模块似乎是最接近您要求的模块,因为 主要功能 是为了让您控制单个用户的访问,而不是按角色或分类学术语来控制访问权限。

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

它缺少更高级访问控制模块的某些功能,例如 内容访问, ,但是它是积极维护的,目前在其问题队列中没有空旷的错误。

披露:我是FlexI访问的维护者。

许可以下: CC-BY-SA归因
scroll top