current_user_can() — Verificar capacidades do usuário

Time Full Services Time Full Services
Tipo Segurança
Nome do erro current_user_can() — Verificar capacidades do usuário
Severidade Crítico
Desde WordPress 2.0
Descrição Verifica se o usuário atual possui uma determinada capacidade (capability) antes de executar uma ação sensível no WordPress.

Causa

Executar ações administrativas, modificar dados ou acessar informações sensíveis sem verificar permissões permite que qualquer usuário (ou visitante) faça ações indevidas.

Como resolver

Sempre verifique permissões antes de qualquer operação sensível. Use capabilities específicas como edit_posts, manage_options ou delete_others_posts ao invés de apenas verificar o role.

PHP
<?php
// ❌ ERRADO — verifica apenas se está logado
if (is_user_logged_in()) {
    delete_post_meta($post_id, '_dado_sensivel');
}

// ✅ CORRETO — verifica a capability específica
if (current_user_can('edit_post', $post_id)) {
    delete_post_meta($post_id, '_dado_sensivel');
}

// ✅ Para ações administrativas
add_action('admin_post_exportar_dados', function (): void {
    if (!current_user_can('manage_options')) {
        wp_die(
            esc_html__('Você não tem permissão para realizar esta ação.'),
            esc_html__('Acesso negado'),
            ['response' => 403, 'back_link' => true]
        );
    }

    // Só chega aqui se for administrador
    // ... lógica de exportação
});

// ✅ Verificar meta capability (contextual por post)
function pode_editar_produto(int $produto_id): bool
{
    return current_user_can('edit_post', $produto_id)
        && current_user_can('edit_produtos');
}

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →