it-swarm-es.com

Permitir que los módulos de terceros alteren la consulta ejecutada por un módulo

Estoy desarrollando un módulo que expone una API pública, que incluye funciones para guardar datos en su propia tabla de base de datos, que se supone que se debe utilizar desde cualquier módulo que use mi módulo.

El módulo verifica el contenido de la base de datos para verificar si no se le permite a un usuario acceder al sitio, o si los usuarios deben ser notificados con un mensaje de error cuando cambian algo en sus perfiles de usuario.
[.____] Teniendo en cuenta que en la mayoría de los casos, la tabla de la base de datos es la única tabla que verificar, si puedo cambiar el código para permitir que los módulos de terceros alteren la consulta que se ejecuta desde mi módulo a través de hook_query_TAG_alter() (o la más genérica hook_query_alter()), ¿o use un gancho personalizado que otros módulos deben implementar?

1
kiamlaluno

No estoy realmente seguro de cuál es tu pregunta exactamente ahora.

  • No estoy seguro de por qué Hook_Query_Alter () incluso existe, no lo hizo al principio. No creo que ese gancho tenga mucho sentido, no puedo pensar en un caso de uso en el que desea alterar cada consulta .

  • Si espera que otros módulos quieran extender su consulta, luego use "-> Addtag ​​('YourModule_Tag')" Para que sea posible modificarlo. Como ya dijiste, esto solo cubre los casos en que se debe cambiar la misma consulta existente. Puede ser posible hacer otros controles y luego agregar una condición que nunca puede ser verdadera (como 1 = 0) en la consulta, pero eso me suena hacky.

  • También puede definir su propio gancho si cree que podría haber verificaciones más complejas que otros módulos quieran hacer. Probablemente desee reutilizar el patrón Hook_Node_Access con tres valores de retorno posibles (ignorar, permitir, denegar), ver NOde_Access () .

Puede realizar cualquiera o ambas de estas dos cosas, las llamadas de gancho son bastante rápidas en D7 porque las implementaciones de gancho se almacenan en caché y no necesitan volver a verificar cada vez que se invoca el gancho.

1
Berdir