Как разрешить роли блокировать других пользователей?
Похоже, что до сих пор не существует отличного решения для защиты от нежелательной почты для D7 ;-(
У меня уже есть флаги для узлов и комментариев с автоматической отменой публикации, как только достаточное количество пользователей отметит это.
Я хочу иметь возможность предоставлять пользователям определенной роли разрешение блокировать других пользователей и, возможно, отменять публикацию любого контента этого пользователя.
Я не вижу разрешения для "блокировать пользователя". Как это можно сделать?
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;
}
}
Похоже, что вы должны сделать это с помощью пользовательского модуля.
Для блокировки пользователя используйте db api и просто измените значение столбца статус (таблица пользователей) на 0.
То же самое относится и к неопубликованному выбранному пользовательскому контенту. Все, что вам нужно, находится в таблице узла .
Итак, для этой работы вам нужно два оператора ОБНОВЛЕНИЯ. Это все.
КСТАТИ. Вы пробовали mollom для защиты от спама? Вы можете указать любую форму для работы с mollom. Возможно, вы сможете настроить этот модуль для работы с зарегистрированные пользователи.
У Mollom есть хорошее разрешение, например: Обойти защиту Mollom в формах, поэтому вы можете выбрать, какая роль может обойти проверку на спам или нет. Затем просто попробуйте найти любой крючок, объявленный модулем Mollom, который позволяет блокировать пользователя при обнаружении спама.
Перед написанием кода я, вероятно, добавлю флаг пользователя в профиль, который виден только для этого специального правила. Когда вы отмечаете пользователя, он запускает правило для блокировки этого пользователя.