Me pregunto si alguien sabe de una manera elegante de lograr esto usando el sistema Symfony2 ACL.Symfony2 ACL combinado con otro criterio
Tengo un Comment
entidad (mi objeto de dominio), que tiene que ser editable por ROLE_USER
pero esto sólo está permitido dentro de los 5 minutos del comentario al que se ha escrito - de lo contrario el comentario sólo puede ser editado por ROLE_ADMIN
.
Haciéndolo para que solo pueda ser editado por ROLE_USER
y ROLE_ADMIN
es simple, solo haga un RoleSecurityIdentity
para cada uno.
Ahora mi problema ocurre cuando quiero incorporar el factor de tiempo para ROLE_USER
. Mi primer problema es que necesita información del objeto de dominio, no solo de la tabla de ACL, pero creo que esto se puede resolver haciendo una clase personalizada ObjectIdentity
que también puede contener el tiempo en que se publicó Comment
.
Ahora viene la parte difícil
Creo que necesito para crear una costumbre PermissionGrantingStrategy
que sabe mirar también a la hora de creación. Esto debe cargarse cuando se comprueba un tipo Comment
, pero no sé cómo cargarlo. ¿Alguien sabe si hay algún tipo de fábrica a través de la cual se pueda configurar este tipo de cosas? ¿De modo que si una entidad tiene asociado un PermissionGrantingStrategy
específico, entonces se usa o, de lo contrario, se utiliza el valor predeterminado?
Sé que este es un poco largo, muchas gracias si alguien sabe cómo lograr esto ya que la documentación de ACL parece un poco escasa en este momento. Mi solución alternativa es simplemente hacer algún tipo de servicio para verificar si un Comentario puede ser editado y no molestar con ACL en absoluto.
Esto suena como lo que necesito, se conecta muy bien y también se puede acceder a través del contexto de seguridad isGranted (que también se puede usar en mi interfaz para mostrar controles condicionalmente para editar el comentario). Le daré una oportunidad esta noche y marcaré la respuesta si funciona, pero parece que estás en un ganador :) ¡Gracias! – Kasheen
Ok, después de implementar esta solución diría que es el camino a seguir, pero publicaré mi código a continuación en caso de que ayude a cualquiera ya que encontré muchas trampas al crear un votante, así que espero que mi código sirva como documentación (aunque No puedo garantizar la corrección) a otros. – Kasheen