Actualmente estoy experimentando con la siguiente solución. Aunque solo funcionará para aplicaciones con un conjunto bastante simple de usuarios, podría ser de alguna ayuda para usted.
Para empezar, la autenticación de usuario se realiza sin extjs, utilizando una página HTML/CSS simple. Una vez que el usuario inicia sesión, sus detalles (identificación de usuario, función) se guardan en la sesión de PHP. Y luego la página redirige a una de las dos aplicaciones extjs.
Una aplicación para usuarios normales (los llamaré clientes), estas son personas que en el lado del cliente JS no incluye ninguna funcionalidad de administración. La otra aplicación es para administradores.
Ambas aplicaciones tienen sus clases heredadas de las clases base. Así que tenemos, por ejemplo, base.mainMenu de la cual heredan tanto admin.mainMenu como clients.mainMenu. La única diferencia en el script app.js son los controladores cargados, y por módulo de carga dinámica extJS 4, solo se cargan las vistas relacionadas (es decir, se ven en el lado del cliente). En mi caso, todas las páginas se cargan dinámicamente de todos modos, por lo que mis usuarios solo pueden cargar páginas dinámicamente en su menú principal.
La aplicación de administración bloquea ciertas características utilizando una variable JS global que incluye el rol del usuario. Entonces, por ejemplo, ocultar una tecla 'editar' de moderadores (un grupo de administración con menos derechos) se realiza una vez que se carga la vista (en la práctica, esto se hace no cargando un complemento que permite editar la vista).
Para concluir, cualquier llamada al servidor comprueba si el usuario de la sesión tiene derechos para la operación solicitada, por lo que independientemente de las secuencias de comandos del lado del cliente, la operación del servidor solo puede ser realizada por personas con los derechos adecuados.
En resumen, usted tiene 3 estrategias diferentes que se pueden mezclar y combinar:
- Cargando diferentes aplicaciones para diferentes usuarios. Si sus clases son inherentes a las clases base, esto es más fácil que mantener 2 o más aplicaciones completamente diferentes.
- Usando una variable JS global para deshabilitar/habilitar ciertas funciones para ciertos usuarios. Esto solo es bueno si no tiene un problema con las funciones de carga del lado del cliente que luego están deshabilitadas (pero que los depuradores aún ven).
- Sin importar nada, todas las llamadas del lado del servidor se comparan con la variable de sesión.
Este es realmente el mejor ejemplo de hacerlo, incluso si está centrado en Java. Gracias por proporcionar este enlace !! –
Buen trabajo en tu blog ... –