Есть модуль, который делает это, но я не могу вспомнить название. Я действительно чувствовал, что подход, использованный модулем, был слишком громоздким, в нем было много кода, когда действительно важный код был только одной строкой, обернутой некоторой логикой разрешений.
Это моя версия кода:
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');
}
Это добавляет несколько дополнительных разрешений, которые позволяют вам разрешать пользователям публиковать / отменять публикацию своего или всего типа контента, а также всех типов контента.