我想让用户不公开并发布自己的内容。默认情况下,您必须授予“管理节点”权限,以便用户能够不发布或发布内容。那是宽广的方式。我想在且仅当他们创建该节点时,让用户不公开或发布节点。这也意味着他们应该能够在且仅当创建它时查看未发表的节点。

有帮助吗?

解决方案

我在某些站点上使用的UI方法是 覆盖节点选项 模块,添加了与我的其他答案提供的权限,以及一堆额外的权限。

其他提示

我们总是使用 发布内容 为此。它添加了许多细粒度的权限和节点上的发布/未发布选项卡。

这个模块

  • 启用颗粒状发布和不发表权限:
    • 全局(联合国/发布任何内容)
    • 每个“节点类型”(un/发布任何[NodeType]内容)
    • 每个用户(UN/发布自己的[NodeType]内容
  • 在节点页面上添加一个“发布/未发布”选项卡,以进行单击联合/发布。
  • 揭示出发布/不公开链接到您的视图,从而易于简化审阅者,编辑和出版商的工作流程。
  • 轻量级,永远会。

我建议使用 修订模块 这为您提供了与上述方法的好处。当然,它是一个完全维护的模块,因此将大量注视代码和大量的错误修复。第二,您将获得更多功能,以适合您的整体工作流程。

对于您的用例,赋予您的用户“创建者”权限和“主持人”权限,以便基本上可以调节自己的内容,但是如模块描述中所述,它们是 不是 鉴于诸如赋予“管理节点”之类的上帝的力量会赋予。

有一个可以做到这一点的模块,但是我不记得这个名字了。我实际上觉得该模块采用的方法太麻烦了,当实际重要的代码实际上仅包含一行带有某些权限逻辑的一行时,它具有很多代码。

这是我的代码版本:

function MYMODULE_perm() {
  $perms[] = 'administer status of any content';

  foreach (node_get_types() as $type) {
    if (isset($type->type)) {
      $perms[] = 'administer status of any '. check_plain($type->type) .' content';
      $perms[] = 'administer status of own '. check_plain($type->type) .' content';
    }
  }

  return $perms;
}

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'node-form' && $form_id == "{$form['#node']->type}_node_form" && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

这增加了一些额外的权限,使您可以允许用户发布/不发布自己或所有内容类型,以及所有内容类型,请设置您的期望。

我只想更新解密的答案,如果您不想添加另一个模块,以适合Drupal 7:

/**
 * Implements hook_permission().
 */
function MYMODULE_permission() {  
  $perms = array(
    'administer status of any content' => array(
      'title' => t('Administer status for all content type'),
      'description' => t(''),
      'restrict access' => true
    ),
  );

  foreach (node_type_get_types() as $type) {
    if (isset($type->type)) {
      $perm_types = array(
        'administer status of any '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of any '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),

        'administer status of own '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of own '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),
      );
      $perms = array_merge($perms,$perm_types);
    }
  }

  return $perms;
}


function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if (preg_match('/_node_form$/', $form_id) && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

您可以通过结合力量来实现这一目标 旗帜规则 模块。

  1. 创建一个新标志 发布 并授予用户许可以仅标记自己的内容。
  2. 接下来,添加一个新规则,该规则在标记节点并发布标记节点时会触发。同样,创建第二个规则,该规则未发表未经标准的节点 发布.
  3. 最后,授予用户许可查看自己未发表的节点,并添加一个 发布 链接到节点页面。

内容访问 模块应涵盖您想要的东西。

该模块使您可以按角色和作者管理内容类型的权限。它允许您为每种内容类型指定自定义视图,编辑和删除权限。您可以选择启用每个内容访问设置,因此您可以自定义每个内容节点的访问。

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