it-swarm-es.tech

¿Se puede limitar la lista de acceso de un elemento del menú front-end a ciertos grupos de usuarios?

¿Se puede configurar una vista de componentes para mostrar solo un subconjunto de Grupos de usuarios disponibles cuando se agrega a un menú?

Mi componente tiene una vista frontal que debe nunca ser permitida para ser vista por cualquier persona, excepto los usuarios que están dentro de un Grupo de usuarios front-end personalizado. Entiendo que la persona que agrega el elemento del menú debe "saber" lo que está haciendo, pero me interesa saber si esto también se puede hacer.

3
GDP

No en un sentido estándar, es decir, la interfaz de usuario normal proporcionada por Joomla. (¿Suponiendo que está hablando cuando se crea un elemento de menú real aquí?) Las extensiones no tienen la oportunidad de ejecutar código cuando se crea un elemento de menú, por lo tanto, respuesta breve: no.

Normalmente sugeriría un complemento, pero mirando com_menu Solo puedo ver dos JEventDispatcher llamadas y no son muy útiles.

En /administrator/components/com_menus/models/menutypes.php Tienes:

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

Y en /administrator/components/com_menus/views/items/view.html.php Tienes:

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

Mirando una capa más profunda, la clase de elemento de menú MenusModelItem extends JModelAdmin Lo bueno aquí es que JModelAdmin activa un evento onContentChangeState() que podría atrapar y deshabilitar a cualquiera que intente configurar su vista a publicada si el grupo de usuarios es incorrecto.

Dicho esto, no estaría haciendo eso. Los menús son solo caminos y fáciles de adivinar en nuestro mundo SEO/SEF. El lugar correcto para hacerlo es en el componente/vista en sí, rechazando a cualquiera que no esté en el grupo correcto. Puede hacer esto ya sea devolviendo a los usuarios en silencio a la página de inicio o arrojando un 404.

3
Craig