diff --git modules/user/user.module modules/user/user.module index 505fe68..e9b578b 100644 --- modules/user/user.module +++ modules/user/user.module @@ -2785,13 +2785,10 @@ 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(); + if (empty($modules[$name])) { + throw new Exception(t('Unable to grant permission @permission. The module in which it is defined is not enabled.', array('@permission' => $permission))); + } + user_role_grant_permission($rid, $name, $modules[$name]); } // Clear the user access cache. @@ -2799,6 +2796,30 @@ function user_role_grant_permissions($rid, array $permissions = array()) { drupal_static_reset('user_role_permissions'); } + +/** + * Grant a permission to a user role. + * + * @param $rid + * The ID of a user role to alter. + * @param $permission + * The name of the permission grant. + * @param $module + * The name of the module the permission belongs to. + * + * @return int + * Database query status code. + */ +function user_role_grant_permission($rid, $permission, $module) { + return db_merge('role_permission') + ->key(array( + 'rid' => $rid, + 'permission' => $permission, + 'module' => $module, + )) + ->execute(); +} + /** * Revoke permissions from a user role. *