В этом шаге мы реализуем проверки прав доступа и добавим меры безопасности для защиты плагина от несанкционированного доступа и потенциальных уязвимостей.

  1. Открой файл admin-knowledge-base.php в корневой папке плагина.
  2. Найди функцию akb_register_post_type() и добавь следующий код внутри массива $args:
'capability_type'    => 'post',
'map_meta_cap'       => true,
'capabilities'       => array(
    'create_posts' => 'create_knowledge_base',
    'edit_posts'   => 'edit_knowledge_base',
    'delete_posts' => 'delete_knowledge_base',
),

Этот код определяет специальные возможности (capabilities) для типа записи «База знаний». Мы указываем, что для создания, редактирования и удаления записей базы знаний требуются специальные возможности create_knowledge_base, edit_knowledge_base и delete_knowledge_base соответственно.

  1. Добавь следующий код в конец файла admin-knowledge-base.php:
function akb_add_admin_capabilities() {
    $role = get_role( 'administrator' );

    if ( ! $role->has_cap( 'create_knowledge_base' ) ) {
        $role->add_cap( 'create_knowledge_base' );
    }

    if ( ! $role->has_cap( 'edit_knowledge_base' ) ) {
        $role->add_cap( 'edit_knowledge_base' );
    }

    if ( ! $role->has_cap( 'delete_knowledge_base' ) ) {
        $role->add_cap( 'delete_knowledge_base' );
    }
}
register_activation_hook( __FILE__, 'akb_add_admin_capabilities' );

function akb_remove_admin_capabilities() {
    $role = get_role( 'administrator' );

    if ( $role->has_cap( 'create_knowledge_base' ) ) {
        $role->remove_cap( 'create_knowledge_base' );
    }

    if ( $role->has_cap( 'edit_knowledge_base' ) ) {
        $role->remove_cap( 'edit_knowledge_base' );
    }

    if ( $role->has_cap( 'delete_knowledge_base' ) ) {
        $role->remove_cap( 'delete_knowledge_base' );
    }
}
register_deactivation_hook( __FILE__, 'akb_remove_admin_capabilities' );

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

  1. Открой файл admin-page.php в папке includes.
  2. Найди функцию akb_render_admin_page() и добавь следующий код в начало функции:
if ( ! current_user_can( 'edit_knowledge_base' ) ) {
    wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'admin-knowledge-base' ) );
}

Этот код проверяет, есть ли у текущего пользователя возможность edit_knowledge_base перед отображением страницы со списком записей базы знаний. Если у пользователя нет необходимых прав, он увидит сообщение об ошибке.

  1. Сохрани все изменения в файлах.

Теперь мы добавили разграничение доступа и базовые меры безопасности в плагин. Только администраторы будут иметь доступ к созданию, редактированию и удалению записей базы знаний, а пользователи без соответствующих прав не смогут получить доступ к страницам плагина.

На следующем шаге мы займемся стилизацией и скриптами для улучшения внешнего вида и функциональности плагина.