2011-09-11 15 views
10

He visto ejemplos de ACL para tratar con una entidad pero ninguna para tratar de obtener varios elementos, como una lista de publicaciones que pertenecen a un autor. Una (mala) sugerencia fue buscar todos los ítems y luego filtrar usando acl, no va a funcionar cuando tenemos un millón de ítems. ¿Cuál es la forma prevista de obtener varios elementos? Digamos que quiero buscar todas mis publicaciones (usando cualquier criterio que necesite, como publicado u ordenado por) en lotes de 50 para el localizador (otra razón por la que el filtrado posterior no funcionará) terminaría con diferentes tamaños de página).Filtrado de ACL y buscapersonas/entidades múltiples Symfony2

+2

No debe usar ACL para identificar qué publicaciones pertenecen a un autor. Antes de buscar todas las entidades de los usuarios, debe usar la ACL para validar si la "obtención de todas las entidades del usuario" es una acción permitida o no. Si lo es, realiza la acción. Si no, no. – hakre

+0

Disculpe? ¿Cómo va a saber mi código qué elementos pertenecen al usuario si no uso ACL? Tendría que añadir una referencia al usuario en mis publicaciones: el objetivo de acl es no hacer eso. ¿Puedes explicar lo que no estoy recibiendo, por favor? – cyberwombat

+1

¿Cómo sabe su ACL lo que es un usuario? Los usuarios son objetos (no debe significar clase, me refiero al significado amplio de objeto en la programación, por ejemplo, un número entero que contiene el ID de usuario), por lo que tanto la ACL como el resto de la aplicación comparten un dominio aquí. ACL debe sentarse encima, no debe sentarse en todas partes. Si haces que se siente en todas partes, te encuentras con el problema que tienes en la pregunta. Si no lo haces, no tienes. Mantenga separadas las partes funcionales de su aplicación. ACL es ACL, las publicaciones son publicaciones. En su controlador o en sus modelos comerciales, agréguelos, pero no antes. – hakre

Respuesta

2

Creo que no debe usar ACL para determinar qué publicaciones pertenecen a un autor en particular porque ACL es sobre control de acceso/permisos, no sobre encontrar propietarios o determinar relaciones de objeto.

Pero ciertamente, está perfectamente bien para querer obtener una lista de publicaciones que ciertos usuarios pueden ver, editar o moderar, por ejemplo.

Actualmente, no hay ninguna funcionalidad para hacer esto en el nivel de la API, pero ... bueno, creo que en Symfony2/Doctrine2 puedes hacer Native Query y unirme con acl_entries table.

Pero hay un inconveniente. En un sistema grande acl_entries la tabla contendrá demasiadas filas y unirse contra ella puede ser lenta (sabemos que a veces MySQL es estúpido). Por lo tanto, es posible que también desee construir algún tipo de sistema de almacenamiento en caché alrededor de esto.

+3

Estoy desconcertado de que esto no haya sido abordado. Esto significa que no hay generador de administrador, no hay paginación, en un nivel nativo. – cyberwombat

+0

Siento que me falta algo. Usted y Hakre sugieren no usar acl para buscar publicaciones que pertenecen a un usuario, sino que usan acl para ver si pueden hacerlo. Simplemente no entiendo esto. Tengo que hacer un seguimiento de todos los usuarios que pueden editar una publicación fuera de la estructura acl. Entonces, ¿por qué existe el acl en primer lugar?Sé que el usuario puede editar/eliminar una publicación ya que tengo que gestionarla yo mismo. No necesito acl para decirme exactamente lo mismo. Tener acl que me diga que un usuario puede buscar las publicaciones que le pertenecen es bastante inútil. Entonces creo que no estoy obteniendo algo fundamental. – cyberwombat