Función para saber si un usuario tiene un rol de Organic Groups

Hoy os traemos una función que nos permite comprobar si un usuario tiene un determinado rol de organic groups. Para organic groups, cada usuario miembro de un grupo tiene roles distintos para ese grupo y sólo para ese grupo. Con esta función lo que comprobamos es si un usuario tiene un determinado rol al menos en un grupo. Lo que hacemos es simplemente leer la tabla og_users_roles donde se guarda la relación entre usuarios, roles y grupos

Actualización 15/03/2013

La función ahora permite pasar un array de role_ids para comprobar si tiene alguno de ellos, además, he incluído un tercer parámetro opcional para validar primeramente si el usuario tiene un rol del core (por ejemplo, administrador del sitio) y devolver true directamente. También he añadido una validación sobre $uid puesto que en algunos casos, al ejecutarla sobre el usuario anónimo, devolvía true (???)

/**
 * Returns true or false if a user has the given role at least in one group
 * 
 * @author desarrollo2.0 <desarrollo2.0@gmail.com> http://drupal.org/user/534318
 * @param $uid the user id
 * @param $rid the Organic Group role id or an array of Organic Group role ids
 * @param $core_rid If set, if the user has a core system role identifier will bypass the organic group validation 
 * @return boolean 
 */
function user_has_og_role($uid, $rid, $core_rid = false) {
  if(!$uid){
    return FALSE;
  }
  
  if ($core_rid) {
    $user = user_load($uid);
    if(isset($user->roles[$core_rid])){
      return true;
    }
  }
  
  if(!is_array($rid)){
    $rid = array($rid);
  }
  
  $res = db_query('SELECT * FROM {og_users_roles} WHERE uid = :uid AND rid IN (:rid)', array(':uid' => $uid, ':rid' => $rid));
  return ($res->rowCount() != 0);
  
}

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
CAPTCHA
Esta pregunta es para evitar el envío automático de spam