Ограничение действий администратора

178
23 марта 2017, 22:34

Подскажите, как можно ограничить роль второго администратора в админ-панели?
Допустим на сайте зарегистрированы два администратора, второй нужен для тестирования и отладки сайта на wordpress.
Действия, которые нужно запретить для 2го администратора такие:
добавление новых страниц-записей, удаление существующих страниц-записей, установка плагинов-тем, удаление плагинов-тем (но просмотр установленных плагинов-тем должно быть возможно для 2го админа ). Т.е. нужно удалить кнопку "Добавить новую" для записей и тем, или "Добавить новый" для плагинов и запретить удалять записи-плагины-темы.
Использовал такой код в небольшом плагине, но он не работает:

register_activation_hook( __FILE__, 'adminka_install' );
function adminka_install() {
    //Удаление некоторых прав у пользователя user
    remove_cap_user();
}
function remove_cap_user() {
    $user_id = 3; // ID администратора, которго надо ограничить в правах
    $user = new WP_User( $user_id );
    $caps = array(
        'delete_published_pages',
        'delete_published_posts',
        'delete_posts',
        'delete_pages',
        'publish_posts',
        'upload_files',
        'install_plugins'
    );
    foreach ( $caps as $cap ) {
        $user->remove_cap( $cap );
    }
}
Answer 1

Создайте новую роль (например, "Ограниченный Админ") и задайте ей только те права, которые хотите выдать. Новая роль создаётся функцией add_role()

Upd. вот пример создания новой роли на основе роли админа. Сразу оговорюсь, что право создания записей и кнопка "Добавить запись" выводится на основе анализа права пользователя редактировать записи (edit_posts), на основе этого же права определяется право пользователя видеть страницу /wp-admin/edit.php. То есть ограничить его в этом праве не получится. Выходом может служить ограничение права на публикацию записей (publish_posts), в таком случае все созданные им записи будут отправляться на утверждение и нигде на фронтэнде не появятся, что, как я понимаю, частично решает задачу.

function create_small_admin() {
    if (get_role('small_admin') == null) {
        $user = new WP_User(1); // получим экземпляр класса пользователя с правами админа (как правило это пользователь с id=1)
        $adm_caps = $user->get_role_caps(); // получим массив возможностей админа
        $caps = array(
            'edit_others_posts', // нельзя редактировать чужие записи
            'delete_others_posts', // нельзя удалять чужие записи
            'publish_posts', // как уже говорилось выше, право edit_posts отключает всё меню с записями, поэтому можно запретить пользователю публиковать созданные записи (они будут отправляться на утверждение)
            'upload_files',
            'install_plugins',
            'delete_plugins',
            'update_plugins',
            'edit_plugins'
        );
        foreach ($caps as $cap) {
            unset($adm_caps[$cap]); // удалим некоторые возможности
        }
        add_role('small_admin', 'Младший Администратор', $adm_caps); // создадим новую роль на основе роли админа, но с урезанными правами
        $user = new WP_User(3);
        $user->set_role('small_admin'); // установим новую роль для пользователя с id = 3 (то же самое можно и правильнее будет делать из админки)
    }
}
add_action('init', 'create_small_admin');

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

READ ALSO
Курсы валют из Cbr

Курсы валют из Cbr

В этом списке валют из cbr http://wwwcbr

288
Ошибки с PHP7.0-FPM

Ошибки с PHP7.0-FPM

Что есть: 2 сайта на Laravel 51; Сервер Ububntu 16

189
Добавление данных в json, через форму

Добавление данных в json, через форму

Почему после отправки корректных данных, файл datajson не дополняется?

304