Crear Grupos de Permisos en Java
Como se podrían manejar los grupos de permisos para los usuarios en Java. Ejemplo:
Tengo dos módulos uno es recursos humanos y el otro bancos, entonces en recursos humanos tengo lo que son los maestros de empleados, maestro de departamentos, maestro de posiciones y nomina, en el modulo de bancos tengo maestros de banco, maestro de cuentas bancarias y registros bancarias. El caso es que tengo es que me gustaría crear dos grupos de permisos para recursos humanos una para la asistente y otro para la encargada de recursos humanos en cual el rol de la asistente de recursos humanos tendra permisos al modulo de recursos humanos pero no tendrá permisos al modulo de bancos y dentro del modulo de recursos humanos solo tiene permiso para el maestro de empleados pero no tiene permisos a los demás maestros y que no tenga la opción de modificar ni eliminar empleados, pero si la opcion de crear empleados y consultar. Espero que con este ejemplo me haya explicado bien.
- Inicie sesión o regístrese para enviar comentarios
Retroalimentación
Suponiendo que alguien te ayude, ¿le darás retroalimentación? Es decir, si la solución planteada funcionó o no funcionó, si borró el disco duro, etc.
UPDATE: ¡Ah! Olvidé la imagen:
Ventura
Suponiendo que estás usando base de datos una solución podría ser. En la base de datos tener una tabla de permisos : root, bancos, nomina, RH. Cuando se crea un usuario asignarle credenciales de acceso ( usuario y password) y un rol, de modo que, cuando el usuario se logea, ingrese sus credenciales y el rol que tenga. En la aplicación validar que el usuario ingreso usuario y contraseña correcta y que cuente con el rol que le pertenezca. Dependiendo los permisos que tenga, seran las vistas o modulos que tenga disponibles.
Esto sería una forma, pero existen más, esto en función de tus requerimientos y tecnologias que estes empleando.
Saludos
permiso por operación más roles
Puedes tener un permiso por operación y roles que tengan uno o más permisos. Incluso puedes tener roles que tengan roles para agrupar.
Así el rol MRH (maestro de RH) tendría los permisos:
Y puedes tener otro rol Asistente de RH
Al usuario le asignas un rol o más roles y cuando el usuario entra al sistema se cargan sus roles. Antes de realizar una operación se revisa si su rol tiene ese permiso.
Luego puedes agrupar roles:
Aquí hay una pregunta que parece similar a lo que buscas:
No es exclusivo de java
Existen muchas maneras de resolver algunas son más complejas y difíciles de mantener (tanto en programación como en administración de usuarios).
Un diseño sencillo.
1. Crear un catálogo de perfiles. En tu caso un registro sería Recursos Humanos, otro Bancos y seguramente otro administrador.
2. Crear un catálogo de Funcionalidades (Pantallas que se accedan desde un Menú).
3. Asignar las funcionalidades a un Perfil.
4. Asignar a un usuario un rol.
Problemas a resolver desde diseño :
* Los catálogos pueden ser flexibles o estáticos dependiendo de la aplicación. Algunas veces es el mismo menú de la aplicación. Si decides hacerlo por base de datos toma en cuenta que la carga puede ser muy pesada según sea de complejo lo que afecta el rendimiento de la aplicación. Pero es bueno que tenga cierta flexibilidad para agregar o quitar funcionalidades en forma rápida.
* Cuidado cuando cuando tengas casos en que un usuario con Perfil superior pueda acceder pantallas de los otros dos Perfiles.
* Especialización de pantallas cuando dos perfiles usan una pantalla pero en mantenimientos van pidiendo cosas diferentes, mi recomendación es no habilitar o des habilitar cosas de una pantalla respecto a un perfil, en su lugar crear una pantalla para cada perfil. Porque cuando hay algún error o aclaración se vuelve muy complejo reproducir el comportamiento.
* Validación cuando un usuario entra a la aplicación y cambia la url a una página de otro rol que el sistema valide que no tiene privilegios.
Últimamente he utilizado este
Últimamente he utilizado este método @paranoid_android y va muy bien, al inicio te pones a pensar por que lo hice así, pues es "mucho trabajo", sin embargo los mantenimientos como bien expresas son mucho mas rápidos y te olvidas por completo si le pegaste a la lógica de otro perfil, así como, quitar mucha lógica de la vista (en cuestión de es fulanito o sutanito), así mismo la jerarquía dentro de los perfiles es muy buena.
Un contra es que si de repente se les ocurre otro puesto...
Pues hay que construir lo necesario para ese puesto.
Claro puede pasar
Ese caso puede pasar y pues necesitas crear una nueva parametrización para el perfil, no es tan rápido atenderla que si todo lo tuvieras en una base de datos. Pero a veces los programadores no tenemos privilegios sobre los datos y un mantenimiento posterior puede volverse muy complejo. Es decir según sea el caso y la empresa.
Hacer un componente muy dinámico para un sistema pequeño resulta a veces in práctico. Pero si vas a tener que hacer muchos sistemas que lo usen vale la pena tomarse el tiempo para hacer una librería.
Una opción es cargar esos valores al inicio de la aplicación y mantenerlos en memoria accesibles a cualquier usuario en una instancia única.
Hay que tener cuidado para gastar poca memoria si se queda como caché.