Cómo limitar el acceso de usuarios a nivel de base de datos en Hibernate

La aplicació

Necesito implementar una aplicación web que será utilizada por diferentes usuarios. Cada usuario tiene diferentes privilegios en varias tablas, por ejemplo,

El usuario A puede ver los campos 'nombre' y 'dirección' de la tablaStudent El usuario B puede ver los campos 'nombre' y 'número de teléfono', pero no 'dirección' de la tablaStudent El usuario C puede ver y modificar todos los campos mencionados anteriormente


Tendré algo en el nivel de UI para limitar cierto acceso, p. ocultar el botón "editar" para usuarios que no tienen permiso para modificar entradas. Sin embargo, creo que debería tener algo en un nivel inferior (¿tal vez en un nivel de base de datos?) Solo para garantizar la seguridad de los datos.

El problem

Estoy usando Hibernate, JBoss, DB2 y Struts para mi aplicación. Creo que debería usar un JBoss LoginModule de algún tipo, que autentica al usuario contra una base de datos con usuario / contraseña / roles (pero puedo estar equivocado (?)). He investigado un poco y se me ocurrieron las siguientes opciones, pero ninguna parece encajar en mi caso. Creo que este es un problema de acceso a datos muy común en aplicaciones web multiusuario. ¿Podría alguien señalarme en la dirección correcta? @¡Gracias de antemano

Utilice la etiqueta 'grant' enhibernate.cfg.xml con oyentes de eventos JACC. Esto puede establecer permisos de "inserción", "actualización", "lectura" en todas las entidades de hibernación. Sin embargo, ¿qué pasa si necesito controles más precisos? Necesito establecer permisos en ciertos campos en lugar de todo el objeto. @http: //www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-decl-security.htm

Limit permisos en método getter / setter de cada ejb. Si entendí esto correctamente, esto requiere la configuración manual de cada bean para cada perfil de usuario, lo que me parece poco realista. @EJB Permisos del método

Code los DAO para verificar los permisos del usuario. Ejecutar mi propia función de utilidad que comprueba una tabla de permisos gigante cada vez que se llama a un método DAO particular para determinar si el usuario conectado puede realizar la acción o no.

Utilice 'interceptor' y 'eventos' en Hibernate. Defina eventos e interceptores específicos "onLoad", "onSaveorUpdate", etc. para cada clase. ¿Puedo especificar el nivel de permiso para campos individuales en este caso? @http: //www.hibernate.org/hib_docs/v3/reference/en-US/html/objectstate-events.htm

Podría estar ladrando al árbol equivocado. Todo lo anterior parece ser laborioso y no muy inteligente. Ninguna de las opciones anteriores me brinda formas programáticas para cambiar los permisos de los usuarios en tiempo de ejecución, lo que sería útil cuando un usuario de nivel de administrador desea dar a otro usuario más control en esta aplicación.


¿Cuál es una buena forma de hacer el control de acceso a datos aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta