Ich habe das gleiche Problem (deshalb habe ich ein Kopfgeld gestartet).
Ich habe es so gelöst.
Ich habe einem benutzerdefinierten Modul eine Funktion hinzugefügt. Sie können einfach Ihr eigenes Modul erstellen, indem Sie in / sites / all / modules einen neuen Ordner mit zwei Dateien erstellen:
yourname_module.info - >>
name = "Custom Functions"
description = "Allows execution of custom code for the website"
core = 7.x
package = "yourname_customs"
version = 7.x-1.x
yourname.module
<?php
function yourname_add_role_to_user($uid, $role_name) {
$user = user_load($uid);
if ($user === false || !isset($user->uid) || !is_array($user->roles)) {
//Display an ugly error when user is not set correctly
exit('$user is not set correctly <pre>' . print_r($user, true) . "</pre>");
}
//Get the user roles
$roles = user_roles(TRUE);
$rid = array_search($role_name, $roles);
if ($rid != FALSE) {
$new_role[$rid] = $role_name;
// Add new role to existing roles.
$all_roles = $user->roles + $new_role;
//Delete all user roles from DB
db_delete('users_roles')
->condition('uid', $user->uid)
->execute();
//Insert all user roles in DB
$query = db_insert('users_roles')->fields(array('uid', 'rid'));
foreach (array_keys($all_roles) as $rid) {
if (!in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
$query->values(array(
'uid' => $user->uid,
'rid' => $rid,
));
}
}
$query->execute();
} else {
//Display an ugly error wen role not found
exit("Could not find role " . htmlspecialchars($role_name) . "<br/>
Vald roles: <pre>" . print_r($roles, true) . "</pre>");
}
}
Gehen Sie dann zu Ihren Modulen und aktivieren Sie "Benutzerdefinierte Funktionen".
Stellen Sie sicher, dass Sie den benutzerdefinierten PHP-Code des Moduls aktiviert haben.
Fügen Sie dann anstelle der Aktion Benutzer zur Rolle in Regeln hinzu, fügen Sie Folgendes hinzu: Führen Sie einen benutzerdefinierten PHP-Code aus und geben Sie Folgendes ein:
yourname_add_role_to_user($account->uid, "Members");
header("Location: /admin/people");
exit;
Dadurch wird der Benutzer zur Rolle hinzugefügt und das Skript gestoppt. Wenn Sie das Skript nicht stoppen, wird die Rolle nicht gespeichert. Und ich musste ein Modul hinzufügen, da user_save
es bei der Ausführung in nicht funktioniert custom php code
.
Ich weiß, dass es sehr hässlich ist, aber es funktioniert bei mir.