非作者的“查看未发布的内容”权限


18

我在Google上搜索了一下,看是否有一种权限级别的方法允许登录的(但非管理员)用户看到未发布的内容(标有CSS节点未发布的类)。这似乎仅计划用于Drupal 8。但是,也许有人足够聪明,可以解决此问题?

我有一个名为的角色Content Editor,该角色应该能够查看所有未发布的内容,无论它们是否是作者。

Answers:


17

如果你真行写一个很小的自定义模块,你可以使用的组合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;
}

现在,您向其分配了新权限的任何角色都可以查看任何节点,而不管它是否已发布。


为了增强安全性,我添加了一些内容,&& user_access('administer nodes')以便它取决于创建内容的权限。现在不是那种“无条件的”。谢谢你的例子!
阿图尔(Artur)2012年

是的,我应该提到您可能想对它“牛肉”一点点:)很高兴为您提供帮助
Clive

克莱夫,又是很棒的东西。这也解决了我的问题之一,即以特定的分类术语限制对节点的访问!
uwe 2012年

1
该代码实际上是“无条件查看任何内容”。它从不检查节点是否已发布。或者,如果角色有权查看内容。
2012年

6

我首先尝试了上面的代码,这很棒。但是在授予角色未发布内容的权限后,该角色仍然无法在视图中看到未发布的内容,这对于某些编辑者角色可能非常有用...

我使用模块view_unpublished解决了它。


我安装了此插件,并且没有解决我的问题,但没有解决该问题,并且未为我创建的自定义Admin组显示所有内容。
mohamad salama 2014年

好吧,很抱歉您有这种行为。我已经使用了一段时间了,从来没有这样的角色扮演过任何角色(如果您是说您的管理员组是一个角色)。然后,您可以在DO中发布问题。
Kojo 2014年

3

我为此使用修订版模块。安装后,它将为每种内容类型创建以下权限:

  • 内容类型:查看自己内容的修订

  • 内容类型:查看任何人的内容的修订

  • 内容类型:发布自己内容的修订版

  • 内容类型:发布任何人的内容的修订版本

通过授予我的编辑者查看任何内容的修订的权限,他们可以访问和发布由其他用户创建或修订的所有节点。


1

这就是我最终所做的。

它为每种节点类型创建一个“查看任何内容许可”。它与节点模块的功能几乎相同,但是增加了额外的选项。

/**
 * 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;
}

1

有一个适用于Drupal 7和Drupal 8的模块:

View_unpublished

该模块允许您授予特定用户角色的访问权限,以查看特定类型的未发布节点。在这方面,访问控制非常精细。


0

参考官方管理指南:https : //drupal.org/node/1106606 Kojo建议的view_unpublished模块是一种快速简便的解决方案。


0

一个简单,合理的解决方法是在节点上使用“提升为首页”标志。

如果此标志没有其他用途,请过滤“提升为首页”的视图。您的内容编辑者可以在节点升级之前(通过使用直接链接)在节点上工作。但它可能尚未出现在站点访问者中。

我们从Youtube的“非公开视频”方法中获得了灵感。


0

如果只需要在视图中查看内容,请在“视图” UI SQL rewriting中的“ Query Settings下方” 禁用Other

这对我有用,因为我只希望用户能够取消标记未发布的内容。

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.