Привет. Хороший плагин, пользуюсь давно им и очень доволен. Но такая проблема, что пользователи под правами "автора" не могут зайти в админку для опубликования постов. Отключив плагин, пользователь может зайти. Можно ли как то решить эту проблему? У меня версия Рекола 5.1.4 .Я знаю, что есть обновленные версии, но можно ли имено чтото сделать в этой?убрать или добавить что то в коде. Спасибо!
Андрей Plechev сказал(а)
Плагин запрещает доступ в админку все ролям ниже роли редактора. Чтобы отключить эту функцию вам надо удалить ее код в файле functions.php в папке плагина. Функция должна быть подписана комментарием, поэтому найти ее труда не составит. Называется wp_admin_success()
К стати, в wp не рационально делать запрет в админку по level.
У меня полностью готовый плагин и допиленный под мои нужды.
Дам лишь самое главное Идею:
Создаем файл, к примеру access.php, в него вписывем следующие строки:
<?php if (current_user_can('level_2','level_3','level_4','level_5','level_6','level_7','level_8','level_9','level_10')) : // Админы, редакторы, авторы ?> <?php global $user_ID; $user_key = $user_ID."]".md5(AUTH_KEY.$user_ID); header('Content-Type: text/html; charset=utf-8'); $user_agent = $_SERVER["HTTP_USER_AGENT"]; if (strpos($user_agent, "$user_key") == false || substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) !== "ru" && substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5) !== "ru-ru" && substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) !== "uk") die('Доступ закрыт'); <?php elseif (current_user_can('level_0','level_1')) : // Подписчики, журналисты, можжно не указывать ?> <?php else : ?> <?php endif; ?>
// К стати в коде выше я добавил ещё и проверку языка браузера Русский или Украинский
Далее открываем /wp-config.php
и инклюдим ниже
require_once(ABSPATH . 'wp-settings.php');
наш файл
include (TEMPLATEPATH . '/access.php'); который должен лежать в папке с активным стилем.
Ну а дальше пишем плагин под ваш браузер в котором можно указать ваш ключ доступа в поле юзер агента. К счастью такой плагин уже написан под все популярные браузеры. Я использую переделанный и локализованный мною плагин UA под Gecko FF. В котором указывается ключ для нужного сайта. Для каждого сайта свой ключ, или если не указали ключ просто выводить ваш стандартный юзер-агент.
Плюсы очевидны:
Доступ под админ , редактором ... на весь сайт в целом будет закрыт, если авторизация прошла без подтверждения ключа.
Код универсальный и будет работать на всех версиях WP.
Не нужно иметь белый ip
Как узнать свой ключь?
Создаем секретный файл key.php при обращении к которому пользователь увидит именно свой ключ с генерированный на базе его id+соль.
И добавим туда следующие строки:
<?php require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); ?> <?php if ( is_user_logged_in()) : ?> <?php global $user_ID; $user_key = $user_ID."]".md5(AUTH_KEY.$user_ID); echo $user_key; ?> <?php else : ?> <?php header('Location:'.$_SERVER['DOCUMENT_ROOT'].'/wp-login.php'); ?> <?php endif; ?>
Ключ вы должны посмотреть до того как админ переведет вас в группу выше автора.
У меня это сделано так: Пользователь дает запрос повысить права на сайте, админ подтверждая отправляет на мыло пользователю ключ и ссылку на страницу закачки плагина для браузера пользователя.
Эксклюзивно для сайта
Если закрыть доступ по левел, то навредить сайту может любой, кто узнает пароль админа. Угнать пароль админа проще чем догадаться что на сайте независимая проверка по ключу. И узнать этот ключь гараздо сложнее чем узнать тот самый заветный пароль. Я бы предложил доступ по IP, но и этот вариант не самый безопасный.
Пара строк кода запретит доступ на сайт или к отдельным её частям только по левел, хотя добавив ещё немного кода и можно полностью защитить главные группы от взлома. Даже если предполагаемый хакер будет знать все пароли пользователей главных групп