current_user_can() — Verificar capacidades do usuário
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');
}