Answers:
如果你真行写一个很小的自定义模块,你可以使用的组合hook_permission()
,并hook_node_access()
做到这一点:
function MYMODULE_permission() {
return array(
'unconditionally view unpublished content' => array(
'title' => t('Unconditionally View Unpublished Content'),
'restrict access' => TRUE
)
);
}
function MYMODULE_node_access($node, $op, $account) {
// We're only bothered about the 'view' operation at the moment
if ($op == 'view') {
// If the user has access to our new permission, let 'em at it
if (user_access('unconditionally view unpublished content', $account)) {
return NODE_ACCESS_ALLOW;
}
}
// For everything else let the system decide.
return NODE_ACCESS_IGNORE;
}
现在,您向其分配了新权限的任何角色都可以查看任何节点,而不管它是否已发布。
我首先尝试了上面的代码,这很棒。但是在授予角色未发布内容的权限后,该角色仍然无法在视图中看到未发布的内容,这对于某些编辑者角色可能非常有用...
我使用模块view_unpublished解决了它。
这就是我最终所做的。
它为每种节点类型创建一个“查看任何内容许可”。它与节点模块的功能几乎相同,但是增加了额外的选项。
/**
* Implements hook_permission().
*/
function MODULE_permission() {
$perms = array();
foreach (node_permissions_get_configured_types() as $type) {
$info = node_type_get_type($type);
$perms += array(
"view $type content" => array(
'title' => t('%type_name: View any content', array('%type_name' => $info->name)),
)
);
}
return $perms;
}
/**
* Implements hook_node_access().
*/
function MODULE_node_access($node, $op, $account) {
$type = is_string($node) ? $node : $node->type;
if (in_array($type, node_permissions_get_configured_types())) {
if ($op == 'view' && user_access('view ' . $type . ' content', $account)) {
return NODE_ACCESS_ALLOW;
}
}
return NODE_ACCESS_IGNORE;
}
&& user_access('administer nodes')
以便它取决于创建内容的权限。现在不是那种“无条件的”。谢谢你的例子!