Как я могу разрешить пользователям отменять публикацию и публиковать свой собственный контент?
Я хочу разрешить пользователям отменять публикацию и публиковать свой собственный контент. По умолчанию вы должны предоставить пользователям разрешение "администрировать узлы", чтобы они могли отменять публикацию или публиковать контент. Это путь к широте, хотя. Я хочу, чтобы пользователи могли отменить публикацию или опубликовать узел, если и только если они его создали. Это также означает, что они должны иметь возможность просматривать неопубликованные узлы тогда и только тогда, когда они их создали.
7 answers
Подход пользовательского интерфейса, который я использовал на некоторых сайтах, - это модуль Переопределения параметров узла , добавляет разрешения, аналогичные тем, которые предоставляет мой другой ответ, плюс кучу дополнительных.
Для этого мы всегда используем модуль Публикация контента . Он добавляет ряд детализированных разрешений и вкладку "Опубликовать/отменить публикацию" на узлах.
Этот модуль
- включает подробные разрешения на публикацию и отмену публикации:
- глобальный (не публиковать/публиковать любой контент)
- для "типа узла" (отменить/опубликовать любой контент [типа узла])
- на пользователя (отменить/опубликовать собственный контент [типа узла]
- добавляет вкладку "Опубликовать/отменить публикацию" в страница узла для отмены/публикации одним щелчком мыши.
- предоставляет ссылки на публикацию/отмену публикации ваших мнений, что упрощает оптимизацию рабочих процессов для рецензентов, редакторов и издателей.
- легкий и всегда будет таким.
Я бы рекомендовал использовать модуль пересмотра , который дает вам несколько преимуществ по сравнению с вышеуказанными методами. Один из них, конечно, заключается в том, что это полностью поддерживаемый модуль, и поэтому на код будет обращено много внимания и исправлено множество ошибок. Во-вторых, вы получите больше возможностей, чтобы вписать это в ваш общий рабочий процесс.
В вашем случае использования предоставляет вашим пользователям как разрешения "создателя", так и разрешения "модератора", чтобы они могли в основном модерировать свой собственный контент, но, как говорится в описание модуля, они не наделены богоподобными полномочиями, такими как предоставление "администрирующих узлов".
Есть модуль, который делает это, но я не могу точно вспомнить его название. Я действительно чувствовал, что подход, который использовал модуль, был слишком громоздким, в нем было много кода, когда на самом деле важный код состоял всего из одной строки, обернутой некоторой логикой разрешений.
Это моя версия кода:
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');
}
Вы можете достичь этого, объединив возможности модулей Флаг и Правила .
- Создайте новый флаг Опубликуйте и дайте пользователям разрешение помечать только свой собственный контент.
- Затем добавьте новое правило, которое срабатывает, когда узел помечен, и которое публикует помеченный узел. Аналогично, создайте второе правило, которое отменяет публикацию узлов, которые не помечены в разделе Публикация.
- Наконец, дайте пользователям разрешение просматривать свои собственные неопубликованные узлов и добавьте ссылку Опубликовать на страницы узла.
Модуль доступа к контенту должен охватывать то, что вы хотите.
Этот модуль позволяет управлять разрешениями для типов контента по ролям и авторам. Это позволяет вам задавать пользовательские разрешения на просмотр, редактирование и удаление для каждого типа контента. При необходимости вы можете включить параметры доступа к каждому контенту, чтобы настроить доступ для каждого узла контента.