- Como Criar um Plugin WordPress com Composer e PSR-4 – WordPress Extremo Dia 1
- Como Usar Serviços em Plugins para Código Limpo e Desacoplado – WordPress Extremo Dia 2
- Como Usar Repositórios em Plugins para Separar Lógica de Dados – WordPress Extremo Dia 3
- Injeção de Dependência Manual em Plugins WordPress – WordPress Extremo Dia 4
- Hooks Avançados no WordPress: apply_filters, do_action e boas práticas
- Criando Comandos WP-CLI Personalizados para Plugins WordPress
- Como Gerenciar Logs e Erros Internos em Plugins WordPress (Do Jeito Certo)
- Tratamento de Erros e Uso Inteligente de Exceptions em Plugins WordPress
- Segurança Profunda em Plugins WordPress
- Internacionalização e Localização (i18n e l10n)
- Criando Settings Pages Profissionais no WordPress
- Permissões Customizadas e Controle de Acesso em Plugins WordPress
- Separação Clara de Camadas: Core, Domain e Infra
- Atualizações Automáticas via GitHub.
- Checklist Final de Publicação: WordPress.org e Produção
Fala dev, tudo certo? 👋
Aqui é o Asllan Maciel novamente, e no post de hoje da nossa trilha WP Extremo – Arquitetura e Engenharia de Plugins, a conversa é sobre controle de acesso.
Se você quer que seu plugin seja profissional, seguro e escalável, precisa dominar como criar e gerenciar permissões customizadas no WordPress.
Bora juntos? 😎
🤔 Por que trabalhar com permissões personalizadas?
Todo plugin que mexe com usuários administrativos precisa controlar quem pode fazer o quê. E não dá pra confiar só no current_user_can('manage_options')
pra tudo.
Vamos pensar em cenários reais:
- Criar relatórios acessíveis apenas para supervisores
- Liberar painel de configuração só para admins de contrato
- Permitir que vendedores editem somente os próprios registros
🔐 Ou seja: precisamos de um controle de acesso granular. E o WordPress permite isso – se a gente usar os recursos certos.
🧱 Capabilities e Roles no WordPress
No WordPress, cada usuário tem um “papel” (role) que vem com um conjunto de capabilities (capacidades). Exemplos:
Role | Algumas Capabilities |
---|---|
administrator | manage_options , edit_users |
editor | edit_others_posts |
author | edit_posts |
Mas o melhor é que você pode criar suas próprias capabilities, como:
add_cap('wp24h_view_dashboard');
add_cap('wp24h_edit_clientes');
add_cap('wp24h_gerar_relatorios');
🛠️ Criando permissões customizadas no plugin
A melhor prática é adicionar as capabilities no momento certo – geralmente na ativação do plugin:
function wp24h_add_custom_caps() {
$role = get_role('administrator');
if ($role) {
$role->add_cap('wp24h_view_dashboard');
$role->add_cap('wp24h_manage_settings');
}
}
register_activation_hook(__FILE__, 'wp24h_add_custom_caps');
E o inverso na desativação, se quiser limpar:
function wp24h_remove_custom_caps() {
$role = get_role('administrator');
if ($role) {
$role->remove_cap('wp24h_view_dashboard');
$role->remove_cap('wp24h_manage_settings');
}
}
register_deactivation_hook(__FILE__, 'wp24h_remove_custom_caps');
🔍 Como verificar permissões no seu plugin
Você pode usar current_user_can()
sempre que quiser proteger algo:
if (!current_user_can('wp24h_view_dashboard')) {
wp_die('Você não tem permissão para acessar esta área.');
}
Ou condicionar a exibição de elementos no admin:
if (current_user_can('wp24h_gerar_relatorios')) {
echo '<a href="relatorio.php">Relatório</a>';
}
🧪 Dica bônus: mapeie tudo com um helper
Pra evitar “strings mágicas” no código, crie um helper centralizado:
class WP24H_Permissoes {
const VIEW_DASHBOARD = 'wp24h_view_dashboard';
const MANAGE_SETTINGS = 'wp24h_manage_settings';
public static function podeVerDashboard() {
return current_user_can(self::VIEW_DASHBOARD);
}
}
Agora, no código você usa:
if (!WP24H_Permissoes::podeVerDashboard()) {
wp_die('Acesso negado!');
}
Fica mais legível e organizado, né?
🤝 Ligando com outras partes da série
Essa parte conecta muito bem com o que já vimos em:
Agora, vamos deixar tudo bem organizado e seguro: logs com contexto, configurações acessíveis somente por quem pode, e permissões fáceis de manter.
✅ Conclusão
Criar permissões customizadas vai te permitir entregar plugins mais robustos, seguros e adaptáveis a diversos contextos (empresas, SaaS, agências…).
Faz parte da arquitetura moderna que estamos seguindo aqui na nossa série.