Primero algunos antecedentes de mi pregunta.Seguridad (también conocido como Permisos) y Lucene - ¿Cómo? ¿Debería hacerse?
- Las entidades individuales pueden haber leído Permisos.
- Si un usuario falla lea, compruebe que no pueden ver esa instancia.
El problema se refiere a la introducción de Lucene y la realización de una búsqueda que simplemente devuelve una lista de instancias de entidades coincidentes. Mi código necesitaría filtrar entidades una a una. Este enfoque es extremadamente ineficiente, ya que existe la posibilidad de que un usuario solo pueda ver una pequeña minoría y comprobar que devolver muchos es menos que ideal.
¿Qué enfoques o cómo resolverán los desarrolladores este problema, teniendo en cuenta que la indexación y las búsquedas se realizan con Lucene?
EDIT
Definiciones
- Un usuario puede pertenecer a varios grupos.
- Un rol puede tener muchos grupos; estos pueden cambiar.
- Un permiso tiene un rol - (direccionamiento indirecto).
- X puede tener un Permiso de lectura.
- Es posible que la definición de un Rol cambie en cualquier momento.
Indexing
- Adición del conjunto de grupos (expansión de un Permmission) en tiempo de índice puede resultar en la definición convertirse fuera de sincronización cuando la lista de grupos de miembros para un cambio de función.
- Espero no tener que reindexar X cada vez que cambie la definición de Permiso/Rol.
Control de seguridad
- pasar una verificación de permiso de un usuario debe pertenecer a un grupo que se encuentra dentro del conjunto de grupos pertenecen a la función de un permiso dado.
Probablemente hicimos algo muy similar: los objetos indexados tienen grupos id: s con privilegios de lectura en un campo de metadatos: "G1, G6, G203" y las búsquedas solo están dirigidas con "contiene G1 o G70". También se extiende a los usuarios usando un prefijo diferente. – Manne
Uso la misma idea, aquí está mi implementación concreta: http://lifeinide.blogspot.com/2013/02/lucene-permissions-and-hibernate-search.html –