题
我想让用户不公开并发布自己的内容。默认情况下,您必须授予“管理节点”权限,以便用户能够不发布或发布内容。那是宽广的方式。我想在且仅当他们创建该节点时,让用户不公开或发布节点。这也意味着他们应该能够在且仅当创建它时查看未发表的节点。
解决方案
我在某些站点上使用的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');
}
这 内容访问 模块应涵盖您想要的东西。
该模块使您可以按角色和作者管理内容类型的权限。它允许您为每种内容类型指定自定义视图,编辑和删除权限。您可以选择启用每个内容访问设置,因此您可以自定义每个内容节点的访问。
不隶属于 drupal.stackexchange