A couple of functions "backported"

These days I am working on a new Drupal module I am going to publish in the next few weeks, and I found that D6 is lacking two nice Drupal 7 functions: user_role_grant_permissions() and user_role_revoke_permissions(). Therefore I thought to write a "backport", just in case.

/**
 * Helper function that adds permissions to a given role.
 *
 * @param $rid
 *   The ID of a user role to alter.
 * @param $permissions
 *   A list of permission names to grant.
 *
 * @see _user_role_revoke_permissions()
 * @link http://api.drupal.org/api/function/user_role_grant_permissions/7 @endlink
 *
 * @return
 *   NULL.
 */
function _user_role_grant_permissions($rid, $permissions = array()) {
  if (!is_array($permissions)) {
    $permissions = array($permissions);
  }
  $result = db_query("SELECT * FROM {permission} WHERE rid = %d", $rid);
  $permission = db_fetch_object($result);
  $perm = (empty($permission->perm)) ? $permissions : array_merge($permissions, explode(', ', $permission->perm));
  asort($perm);
  db_query("UPDATE {permission} SET perm = '%s' WHERE rid = %d", implode(', ', $perm), $rid);
}

/**
 * Helper function that removes permissions from a given role.
 *
 * @param $rid
 *   The ID of a user role to alter.
 * @param $permissions
 *   A list of permission names to revoke.
 *
 * @see _user_role_grant_permissions()
 * @link http://api.drupal.org/api/function/user_role_revoke_permissions/7 @endlink
 *
 * @return
 *   NULL.
 */
function _user_role_revoke_permissions($rid, $permissions = array()) {
  if (!is_array($permissions)) {
    $permissions = array($permissions);
  }
  $len = count($permissions);
  $result = db_query("SELECT * FROM {permission} WHERE rid = %d", $rid);
  $permission = db_fetch_object($result);
  $perm = array_diff(explode(', ', $permission->perm), $permissions);
  asort($perm);
  db_query("UPDATE {permission} SET perm = '%s' WHERE rid = %d", implode(', ', $perm), $rid);
  cache_clear_all();
}