我有一个对特定内容类型具有查看和编辑权限的用户。这赋予所有用户查看和编辑该类型的所有节点的特权。但是实际上,我想为每个用户创建一个唯一的节点,以便只有该用户才能查看和编辑它。我如何在Drupal 7中做到这一点?
我有一个对特定内容类型具有查看和编辑权限的用户。这赋予所有用户查看和编辑该类型的所有节点的特权。但是实际上,我想为每个用户创建一个唯一的节点,以便只有该用户才能查看和编辑它。我如何在Drupal 7中做到这一点?
Answers:
使用现有模块,您可以使用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;
}
使用此挂钩实现,您无需手动编辑为您创建的该内容类型的每个节点提供的访问权限。更改节点的所有者也将更加容易,因为您无需更改该节点的访问权限。该代码将自动向设置为节点所有者(或作者)的用户授予更新和查看权限。
您正在谈论的是Drupal节点访问控制,这是一个巨大的主题。
内核对节点访问控制的内置支持是很自然的,要控制访问以按角色查看节点,必须使用某种类型的节点访问控制模块。在Drupal.org上有一个页面,列出了所有节点访问模块,并对每个模块进行了囊式审查。我建议您看一下该页面,看看是否可以找到合适的模块来控制访问。
该的Flexi访问模块似乎是最匹配你的要求,因为它的模块主要功能是让你控制个别用户的访问,而不是通过角色或分类项。
这是一个小模块,可让您为单个用户设置ACL(访问控制列表)。它基本上是ACL模块的用户界面,因此您也需要安装它。
它缺少一些更高级的访问控制模块的功能,例如Content Access,但是它得到了积极维护,并且在其发布队列中目前没有任何打开的错误。
披露:我是Flexi Access的维护者。