Ponte cómodo, esta es una pregunta difícil.¿Cuál es la mejor manera de adaptar este sistema de seguridad para tratar la herencia múltiple?
Tenemos un sistema que se ocupa de grandes conjuntos de datos. (millones a mil millones de registros por mesa grande). Todos los datos se manejan en una estructura en árbol de nodos.
Estamos utilizando Symfony2 y el sistema de seguridad Symfony2 (objetos de dominio, Acls, Ases, etc.). Nuestro árbol Acl refleja nuestro árbol de nodos.
acuñar un lenguaje:
DP
permiso definido, es decir, un registro as en este nodo aclEP
permiso efectivo, no hay registro de la ECA, el permiso heredado de un padre con unDP
En lógica de negocios, asignamos 0 o 1 ace a un objeto por usuario, y confiamos en la herencia donde no hay ninguno. Root > lvl1 (DP: VIEW) > lvl2 > lvl3 (EP: VIEW)
Hasta ahora, muy bien. Todo esto funciona
Algunos nodos no solo tienen un elemento principal, sino que están asociados a otros nodos (muchos a muchos). Cuando un nodo está asociado a otro nodo, esto representa una ruta separada en el árbol para que las sigan. Es decir, tendríamos 1 o muchas rutas en el árbol para rootear para obtener As.
Leaf < Parent < GrandParent < Root
Leaf < AssociatedNode < AssociatedNodeParent < AssociatedNodeGrandParent < Root
...
O lógica para la gestión de la votación de los ases está muy bien, lo que no estamos seguros de cómo es para representar los múltiples caminos hasta el árbol. Nuestro actual (es decir: las malas) ideas son:
- el comportamiento de los padres múltiple en el árbol acl
- Pros
- Parece más limpio?
- Contras
- Casi toda reescritura del sistema de seguridad para poner esto en.
- ratsnesting potencial.
- Pros
- identidades duplicados de objetos/ACL contra entidades, especificando diferentes padres.
- Pros
- Er ...
- Contras
- creará una cantidad muy grande de registros potencialmente acl.
- Es difícil de administrar en el código.
- Pros
No tengo una respuesta a su pregunta Me temo que si la solucionas, me interesaría mucho leer cómo lo hiciste :-) – richsage
Lo que no obtuve de tu pregunta es por qué cada nodo no obtiene un permiso (por ejemplo, heredado del padre?). Más importante aún, ¿por qué necesita diferentes caminos a través de los ACL en primer lugar? ¿Cuál es tu * caso de uso *? La mayoría de las veces creo que la respuesta es simple una vez que ve los casos de uso en lugar de las soluciones técnicas para un problema. –
¿Puedes aclarar "* asignamos 0 o 1 as a un objeto *": ¿un '0' significa 'permiso explícito negativo' o 'falta de permiso (positivo)'? – Jacco