A couple of functions "backported"
Sun, 05/16/2010 - 15:46
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(); }