# Como corrigir o erro de permissão ao criar Custom Fields no JetEngine

O JetEngine erro de permissão ao criar Custom Fields ocorre quando o usuário logado não tem a capability manage_options exigida pelos menus do JetEngine, quando um plugin de segurança bloqueia o admin-ajax que salva os campos, ou quando a regra de acesso de um Custom Content Type nega a operacao.

## O que é erro de permissão ao criar Custom Fields no JetEngine?

O JetEngine cria campos personalizados de três formas no WordPress: Meta Fields anexados a posts, páginas e Custom Post Types, campos de Taxonomy ou Options Pages, e colunas de Custom Content Types (CCT) gravadas em tabela própria. Toda a administracao desses campos vive nos menus do JetEngine no wp-admin, que são registrados sob a capability manage_options, própria do perfil Administrador. O erro de permissão aparece quando o usuário que tenta criar ou salvar o campo não tem essa capability, ou quando a requisicao que grava o campo e barrada antes de chegar ao banco.

Na prática o sintoma se divide em dois grupos. No primeiro, o menu de Meta Fields nem aparece, ou abre com aviso de acesso negado, porque o perfil em uso (Editor, Autor ou uma role customizada) não herda manage_options. No segundo, o menu abre, você monta o grupo de campos, clica em salvar e a operacao falha com mensagem de permissão, porque o admin-ajax ou o REST que persiste o campo foi bloqueado por um nonce invalido, por um plugin de segurança, ou pela regra de acesso configurada no próprio Custom Content Type.

## Como identificar

- A mensagem 'Sorry, you are not allowed to access this page.' aparece ao tentar abrir o menu de Meta Fields ou Custom Content Types do JetEngine.
- O menu do JetEngine no wp-admin não aparece para um usuário que não e Administrador, mesmo com o plugin ativo.
- Ao clicar em salvar o grupo de campos surge um aviso de permissão ou a tela trava sem confirmar o salvamento.
- No console do navegador a requisicao admin-ajax.php retorna status 403 Forbidden ou a resposta -1 ao salvar o campo.
- Ao gravar um item de Custom Content Type aparece 'You do not have permission to do this' mesmo com o campo já criado.

**Antes de começar:** Antes de alterar capabilities de perfis ou desativar regras de um plugin de segurança em producao, faca um backup do site e teste primeiro em staging. Conceder manage_options a uma role amplia muito os poderes do usuário, entao revise quem recebe esse acesso.

## Como prevenir

- Reserve a criação de Meta Fields e Custom Content Types do JetEngine ao perfil Administrador, em vez de espalhar manage_options por várias roles.
- Documente quais roles customizadas receberam manage_options e revise esse acesso periodicamente, porque ele libera bem mais do que apenas os campos do JetEngine.
- Mantenha no plugin de segurança uma excecao estavel para admin-ajax.php do wp-admin, evitando que regras novas voltem a bloquear o salvamento dos campos.
- Salve o trabalho em grupos de campos grandes em partes, para não perder a edição caso o nonce da sessao expire no meio do processo.

Erros relacionados

- [Como corrigir os Custom Post Types do JetEngine que não aparecem no frontend](https://full.services/wp-fixer/corrigir-cpt-jetengine-nao-aparece-frontend/)
- [Como corrigir as Options Pages do JetEngine que não salvam configurações](https://full.services/wp-fixer/corrigir-jetengine-options-pages-nao-salva/)
- [Como corrigir o erro de taxonomia no JetEngine](https://full.services/wp-fixer/corrigir-erro-taxonomia-jetengine/)

## Causa

- O usuário logado tem perfil Editor, Autor ou uma role customizada que não possui a capability manage_options, exigida pelos menus de Meta Fields e Custom Content Types do JetEngine.
- Uma role criada por plugin gerenciador de perfis (como User Role Editor ou Members) foi salva sem a capability manage_options, entao o JetEngine não registra seus menus para esse perfil.
- Um plugin de segurança ou firewall (como All In One Security ou Wordfence) bloqueia a chamada admin-ajax.php que o JetEngine usa para gravar o grupo de campos, devolvendo 403 antes de salvar.
- O nonce da tela de edição expirou porque a sessao ficou aberta por muito tempo, e o JetEngine recusa a gravacao por verificacao de segurança invalida.
- O Custom Content Type esta configurado com uma regra de acesso (capability ou perfil de admin) que não bate com o usuário atual, negando a criação ou edição dos itens do CCT.

## Como resolver

1. Confirme o perfil e a capability do usuário: Entre com uma conta Administrador e confira o perfil de quem recebe o erro. Os menus de Meta Fields e Custom Content Types do JetEngine são registrados sob a capability manage_options, que so o perfil Administrador tem por padrão. Editor e Autor não a possuem.

```
Painel WP -> Usuários -> Todos os Usuários
Abra o usuário afetado e confirme o Perfil (alvo: Administrador para criar campos)
```

2. Garanta manage_options na role customizada: Se o usuário precisa de uma role customizada em vez de Administrador, atribua a capability manage_options a essa role com um gerenciador de perfis. Sem ela o JetEngine não exibe os menus de campos para o perfil.

```
Instale e ative um gerenciador de perfis (ex.: User Role Editor)
Painel WP -> Usuários -> User Role Editor -> selecione a role
Marque a capability manage_options e clique em Update
```

3. Libere o admin-ajax no plugin de segurança: Se o menu abre mas o salvamento falha com 403, um plugin de segurança ou firewall esta barrando a chamada admin-ajax.php usada pelo JetEngine. Crie uma excecao para admin-ajax.php no wp-admin ou desative o firewall temporariamente para confirmar a causa.

```
Painel WP -> plugin de segurança -> regras de firewall / WAF
Adicione uma excecao para /wp-admin/admin-ajax.php
Salve um grupo de campos de teste para confirmar que o 403 sumiu
```

4. Renove a sessao para corrigir o nonce: Se a tela ficou aberta por muito tempo, o nonce de segurança expira e o JetEngine recusa a gravacao por verificacao invalida. Faca logout e login de novo para gerar um nonce valido antes de montar o grupo de campos.

```
Painel WP -> canto superior direito -> Sair
Faca login novamente e reabra o menu de Meta Fields do JetEngine
Recrie e salve o grupo de campos com a sessao nova
```

5. Ajuste a regra de acesso do Custom Content Type: Se o erro acontece so ao gravar itens de um Custom Content Type, revise a configuração de acesso do CCT. Uma capability ou perfil de admin definido ali que não casa com o usuário atual nega a criação e edição dos itens.

```
Painel WP -> JetEngine -> Custom Content Types -> abra o CCT
Na aba de configurações, ajuste a capability/Admin para um valor que o usuário possui
Salve e tente criar um item novo do CCT
```


## Código

```php
<?php
/**
 * Concede a capability manage_options a uma role customizada
 * para liberar os menus de campos do JetEngine.
 * Rode uma vez (admin logado) e depois remova o snippet.
 */
add_action( 'admin_init', 'full_jetengine_grant_manage_options' );
function full_jetengine_grant_manage_options() {
    if ( ! current_user_can( 'manage_options' ) ) {
        return; // so um admin executa a concessao
    }
    $role = get_role( 'editor' ); // troque pela role alvo
    if ( $role && ! $role->has_cap( 'manage_options' ) ) {
        $role->add_cap( 'manage_options' );
    }
}
```

## Perguntas frequentes

### Por que aparece 'Sorry, you are not allowed' ao criar Custom Fields no JetEngine

Esse aviso indica que o usuário logado não tem a capability manage_options, exigida pelos menus de Meta Fields e Custom Content Types do JetEngine. Entre com uma conta Administrador ou conceda manage_options a role usada para liberar o acesso.

### Qual capability o WordPress exige para criar campos no JetEngine

Os menus de administracao do JetEngine são registrados sob a capability manage_options, própria do perfil Administrador. Perfis como Editor e Autor não a possuem por padrão, por isso não conseguem criar nem salvar grupos de campos.

### Um Editor pode criar Meta Fields no JetEngine

Não sem ajuste. O perfil Editor não tem manage_options, entao os menus de campos do JetEngine não aparecem para ele. Use um gerenciador de perfis para conceder manage_options a uma role, ciente de que isso amplia muito os poderes do usuário.

### Por que o salvamento do campo falha com erro 403

Um plugin de segurança ou firewall costuma bloquear a chamada admin-ajax.php que o JetEngine usa para gravar o grupo de campos, devolvendo 403. Crie uma excecao para admin-ajax.php no wp-admin e tente salvar de novo.

### O nonce expirado pode causar o erro de permissão

Sim. Se a tela de edição ficou aberta por muito tempo, o nonce de segurança expira e o JetEngine recusa a gravacao por verificacao invalida. Faca logout e login para gerar um nonce novo antes de salvar o campo.

### Por que o erro acontece so no meu Custom Content Type

O Custom Content Type tem uma configuração própria de acesso. Se a capability ou o perfil definido ali não casa com o usuário atual, a criação e edição de itens do CCT e negada. Ajuste a regra de acesso do CCT para uma capability que o usuário possui.

### Conceder manage_options a uma role e seguro

E preciso cautela. A capability manage_options libera muito mais do que os campos do JetEngine, incluindo configurações sensiveis do site. Conceda apenas a usuários confiaveis e revise esse acesso periodicamente.

**Fonte:** [Crocoblock Knowledge Base - JetEngine](https://crocoblock.com/knowledge-base/jetengine/)
