如何让用户取消发布并发布自己的内容?


30

我想让用户取消发布并发布自己的内容。默认情况下,您必须授予“管理节点”权限,以便用户能够取消发布或发布内容。但这是广泛的方法。我想让用户仅当他们创建节点时才取消发布或发布节点。这也意味着,当且仅当他们创建未发布的节点时,他们才能够查看未发布的节点。

Answers:


20

我在某些网站上使用的一种UI方法是“ 覆盖节点选项”模块,它添加了与我的其他答案所提供的权限类似的权限,以及大量附加权限。


这似乎是最简单的方法……目前对我有用。谢谢!
Chaulky 2011年

这是最好的方法,因为您可以在不管理节点的情况下允许发布和粘贴:)
Alex Weber

看起来像是一个解决此问题的好模块。
zilverdistel

20

为此,我们始终使用“ 发布内容”模块。它在节点上添加了许多细粒度的权限以及一个“发布/取消发布”选项卡。

这个模块

  • 启用详细的发布和取消发布权限:
    • 全局(取消/发布任何内容)
    • 每个“节点类型”(取消/发布任何[nodetype]内容)
    • 每个用户(取消/发布自己的[nodetype]内容
  • 将“发布/取消发布”选项卡添加到节点页面以一键式取消/发布。
  • 公开您视图的发布/取消发布链接,从而简化了审阅者,编辑者和发布者的工作流程。
  • 是轻量级的,并且将永远如此。

9

我建议使用修订模块,它比上述方法有一些好处。当然,其中之一是它是一个完全维护的模块,因此,将有很多人关注代码和大量错误修复。第二,您将获得更多功能以使其适合您的整体工作流程。

对于您的用例,给用户既具有“创建者”权限又具有“主持人”权限,因此他们基本上可以管理自己的内容,但是如模块说明中所述,他们没有像授予“管理节点的意愿。


这是一个非常有趣的选项,但是里面有比我需要的更多的方法。以为我很高兴我知道它,我可以想到它会派上用场的其他站点。
Chaulky 2011年

6

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

这是我的代码版本:

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');
}

这增加了一些额外的权限,允许您允许用户发布/取消发布他们自己的或所有内容类型,以及所有内容类型,以设置您希望的方式。


谢谢,看起来不错,很有意义。但是,如何查看其未发布的内容呢?如果他们无法查看,将如何发布?
Chaulky 2011年

不应对此造成影响,IIRC用户可以查看其未发布的内容,无论该内容是否具有“管理节点”。
解密

3

我只想更新解密者的答案,如果您不想添加其他模块以适合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');
}

有一个错字。改变$ perms_type至$ perm_types -加任何/自己的状态没有被选中..
雷米

0

您可以通过组合标志规则模块的功能来实现此目的。

  1. 创建一个新的Flag Publish,并授予用户仅标记自己的内容的权限。
  2. 接下来,添加一个新规则,该规则将在标记节点时触发并发布标记的节点。同样,创建第二条规则,该规则取消发布Publish下未标记的节点。
  3. 最后,授予用户查看自己未发布的节点的权限,并向该节点的页面添加“ 发布”链接。

-1

内容访问模块应该包括你想要什么。

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


1
答案含糊不清。如果这比Decipher的答案更好,也许您可​​以详细说明这种方法的好处?
克里斯·科恩

“内容访问”模块实际上并不能解决问题,它增加了按角色设置“查看”,“编辑”和“删除”的功能,但没有设置“发布”的功能。
Decipher
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.