Fa uns dies a Ymbra vam tenir un desafiament tècnic sobre entitats amb el Drupal 7 que no es carregaven durant l'execució del cron. El principal problema era que cron no s'executava amb les credencials suficients i necessitàvem més permissos per executar algunes tasques.
Aquestes entitats tenien restriccions d'accés que havíem definit i quan s'executava cron com usuari anònim (tot i que es llancés com l'usuari amb id=1) aquestes restriccions es respectaven i no podíem carregar la nostra entitat per enviar el seu contingut a un correu electrònic.
Llavors, què podem fer per llançar cron com administrador?
Al hook_cron()
podem fer:
/** * Implements hook_cron(). */ function mymodule_cron() { global $user; $user = user_load(1); }
I també hem d'assegurar-nos que aquest hook s'executa abans que el hook (en aquest cas un altre hook_cron
) que necessita permissos elevats modificant el camp weight de mymodule
a la taula system
.
És important comentar que si executeu el cron de Drupal al navegador (el que abans es coneixia com poorman's cron) no és una bona pràctica i pot causar problemes amb aquesta altra solució. Recomanem doncs executar cron amb Drush a un cron de sistema del vostre servidor.
Com a mesura addicional podeu retornar la variable global $user
al seu estat anònim un cop hàgiu acabat el codi que necessitava privilegis per minimitzar l'impacte.
Podeu llegir-ne més informació en aquest fil relacionat.