Как разрешить роли блокировать других пользователей?


Похоже, что до сих пор не существует отличного решения для защиты от нежелательной почты для D7 ;-(

У меня уже есть флаги для узлов и комментариев с автоматической отменой публикации, как только достаточное количество пользователей отметит это.

Я хочу иметь возможность предоставлять пользователям определенной роли разрешение блокировать других пользователей и, возможно, отменять публикацию любого контента этого пользователя.

Я не вижу разрешения для "блокировать пользователя". Как это можно сделать?

Author: uwe, 2012-07-05

3 answers

Не существует определенной пермь "блокировать пользователя". Из коробки есть только администрирование пользователей пермь, которая, в свою очередь, предоставляет роли возможность добавлять/редактировать/удалять других пользователей. Если вам нужно разрешение блокировать пользователя, вы можете определить свое собственное разрешение блокировать пользователя, а затем предоставить свое пользовательское разрешение любому пользователю/ролям, которые вы хотите. Вот основной рецепт:

  • Реализовать hook_permission, и добавьте разрешение block_user там.
  • Реализовать hook_menu_alter, и измените аргумент 'access callback' для пунктов меню user/%/cancel и user/%/cancel/confirm/%/%, чтобы указать на вашу собственную пользовательскую функцию обратного вызова доступа. Вам также может потребоваться изменить параметр 'page_arguments', чтобы указать на вашу собственную форму вместо формы по умолчанию, если форма отмены пользователя по умолчанию не сокращает ее для вас. По умолчанию вызывается форма user_cancel_confirm_form().
  • При обратном вызове пользовательского доступа вы можете использовать user_access(), чтобы убедиться, что текущий пользователь/роль имеет доступ к разрешению блокировать пользователя.

Прежде чем вы приступите к этому, вам может быть интересно проверить:

  • Записи user/%/cancel и user/%/cancel/confirm/%/% в таблице базы данных menu_router. Он сообщает вам, каковы обратные вызовы доступа и все другие важные детали этих путей.
  • В user_edit_cancel_submit() функция в файле user.pages.inc включает файл. Это функция API формы #submit, которая вызывается, когда вы нажимаете кнопку Отмена на учетная запись любого пользователя.
  • Различные методы отмены учетной записи, представленные в user_cancel_methods(), user.pages.inc. Существует четыре способа отмены бронирования. Я думаю, что *user_cancel_block* и *user_cancel_block_unpublish* являются самыми безопасными методами.

Пример кода:

/**
 * Implements hook_permission.
 */
function rallen_permission() {
  $perms = array();
  $perms['block_user'] = array(
    'title' => t('Block user'),
    'description' => t('Disables accounts and hides their contents.'),
  );
  return $perms;
}

/**
 * Implements hook_menu_alter.
 */
function rallen_menu_alter(&$items) {
  $target_paths = array(
    'user/%/cancel',
    'user/%/cancel/confirm/%/%',
  );
  foreach($target_paths as $menu_item) {
    $items[$menu_item]['access callback'] = 'rallen_block_user';
  }
}

/**
 * Custom access callback for blocking users.
 */
function rallen_block_user() {
  if(user_access('block_user')) {
    return TRUE;
  } else {
    return FALSE;
  }
}
 1
Author: amateur barista, 2012-07-05 18:41:48

Похоже, что вы должны сделать это с помощью пользовательского модуля.

Для блокировки пользователя используйте db api и просто измените значение столбца статус (таблица пользователей) на 0.

То же самое относится и к неопубликованному выбранному пользовательскому контенту. Все, что вам нужно, находится в таблице узла .

Итак, для этой работы вам нужно два оператора ОБНОВЛЕНИЯ. Это все.

КСТАТИ. Вы пробовали mollom для защиты от спама? Вы можете указать любую форму для работы с mollom. Возможно, вы сможете настроить этот модуль для работы с зарегистрированные пользователи.

У Mollom есть хорошее разрешение, например: Обойти защиту Mollom в формах, поэтому вы можете выбрать, какая роль может обойти проверку на спам или нет. Затем просто попробуйте найти любой крючок, объявленный модулем Mollom, который позволяет блокировать пользователя при обнаружении спама.

 2
Author: Codium, 2012-07-05 18:27:15

Перед написанием кода я, вероятно, добавлю флаг пользователя в профиль, который виден только для этого специального правила. Когда вы отмечаете пользователя, он запускает правило для блокировки этого пользователя.

 0
Author: uwe, 2012-07-06 13:29:15