Index: modules/user/user.module =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.module,v retrieving revision 1.1136 diff -u -r1.1136 user.module --- modules/user/user.module 12 Mar 2010 15:56:30 -0000 1.1136 +++ modules/user/user.module 16 Mar 2010 06:38:14 -0000 @@ -2698,32 +2698,39 @@ } /** - * Grant permissions to a user role. + * Grants permissions to a user role. * * @param $rid * The ID of a user role to alter. * @param $permissions - * A list of permission names to grant. + * An array of permission names to grant. Non-existing permissions are + * ignored. * * @see user_role_change_permissions() * @see user_role_revoke_permissions() */ function user_role_grant_permissions($rid, array $permissions = array()) { $modules = user_permission_get_modules(); - // Grant new permissions for the role. - foreach ($permissions as $name) { - db_merge('role_permission') - ->key(array( - 'rid' => $rid, - 'permission' => $name, - 'module' => $modules[$name], - )) - ->execute(); - } - // Clear the user access cache. - drupal_static_reset('user_access'); - drupal_static_reset('user_role_permissions'); + // Ignore non-existing permissions. + $permissions = array_intersect($permissions, array_keys($modules)); + + if ($permissions) { + // Grant new permissions for the role. + foreach ($permissions as $name) { + db_merge('role_permission') + ->key(array( + 'rid' => $rid, + 'permission' => $name, + 'module' => $modules[$name], + )) + ->execute(); + } + + // Clear the user access cache. + drupal_static_reset('user_access'); + drupal_static_reset('user_role_permissions'); + } } /**