ti-enxame.com

A lista de acesso de um item de menu front-end pode ser limitada a determinados grupos de usuários?

Uma exibição de componente pode ser configurada para mostrar apenas um subconjunto de grupos de usuários disponíveis ao adicioná-lo a um menu?

Meu componente tem uma visualização front-end que deve nunca poder ser visualizada por qualquer pessoa, exceto usuários que estejam dentro de um grupo de usuários front-end personalizado. Entendo que a pessoa que adiciona o item de menu deve "saber" o que está fazendo, mas estou interessado em saber se isso também pode ser feito.

3
GDP

Não no sentido padrão, ou seja, a interface normal fornecida pelo Joomla. (Presumindo que você esteja falando quando um item de menu real é criado aqui?) As extensões não têm a chance de executar o código quando um item de menu é criado, portanto, resposta curta: não.

Eu normalmente sugeriria um plug-in, mas olhando para com_menu Só posso ver duas chamadas JEventDispatcher e elas não são muito úteis.

Em /administrator/components/com_menus/models/menutypes.php Você tem:

// Allow a system plugin to insert dynamic menu types to the list shown in menus:
JEventDispatcher::getInstance()->trigger('onAfterGetMenuTypeOptions', array(&$list, $this));

E em /administrator/components/com_menus/views/items/view.html.php Você tem:

// Allow a system plugin to insert dynamic menu types to the list shown in menus:
JEventDispatcher::getInstance()->trigger('onBeforeRenderMenuItems', array($this));

Olhando uma camada mais fundo, a classe do item de menu MenusModelItem extends JModelAdmin É que JModelAdmin aciona um evento onContentChangeState() que você pode interceptar e desabilitar quem tentar definir sua visualização será publicada se o grupo de usuários estiver errado.

Dito isto, eu não faria isso. Os menus são apenas caminhos e fáceis de adivinhar em nosso mundo SEO/SEF. O lugar certo para fazer isso é no próprio componente/exibição, rejeitando qualquer pessoa que não esteja no grupo certo. Você pode fazer isso retornando silenciosamente os usuários para a página inicial ou lançando um 404.

3
Craig