Com saltar el problema d'access node durant el procés cron

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.