Userrechte
Eingetragen von Kourosh (81)
am 25.04.2008 - 14:20 Uhr in
am 25.04.2008 - 14:20 Uhr in
Hallo Zusammen,
weiß jemand, wie man die Userrechte im Laufzeit ändern kann.
Beispiel: User A bekommt neue Rechte, nachdem er eine Formular abgeschickt hat.
Für jeden Rat bin ich sehr dankbar.
Grüße
Kourosh
- Anmelden oder Registrieren um Kommentare zu schreiben
Klingt nach Userpoints.
am 25.04.2008 - 14:45 Uhr
Klingt nach Userpoints.
www.webkatapult.de
Ansonsten auch mit den
am 25.04.2008 - 15:25 Uhr
Ansonsten auch mit den Modulen Action und Triggers möglich oder auch Workflow NG.
--
bv - drupalcenter.de
Schliesse mich dem Tipp von
am 25.04.2008 - 21:12 Uhr
Schliesse mich dem Tipp von bv an.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
theoretisch sollte es
am 28.04.2008 - 08:02 Uhr
theoretisch sollte es möglich sein, ich habe allerdings keinen Action gefunden,
der Userrechte ändern kann, gibt es so ein Action?
ansonsten wie kann ich diese Rechte über php-code ändern.
Grüße
Kourosh
Du kannst die Änderungen ..
am 28.04.2008 - 08:53 Uhr
.. in einem eigenen Modul setzen. Ich habe dafür neue Rollen angelegt, z. B. "Standard" und "Premium". Die Werte werden aus einem eigenen Formular übernommen.
global $user;
$irgendeinePruefung = true;
$sonstwas = true;
$uid = 0;
// Prüfen ob der User schon angelegt ist
if($user -> uid)
$uid = $user -> uid;
// Rollen im Array speichern
$roles = array();
// ermitteln des Mitgliedsstatuses
if($irgendeinePruefung)
$roles[4] = 'Standard';
elseif($sonstwas)
$roles[5] = 'Premium';
// anlegen eines Userr sin Drupal
$return = user_save(
$uid,
array(
'name' => $username,
'pass' => $password,
'mail' => $mitglied['email'],
'roles' => $roles,
'status' => 1,
'init' => $mitglied['email']
));
Der Vorteil ist das User automatisch upgedatet werden, wenn Sie existieren, und neu angelegt werden wenn Sie noch nicht existieren. Über den 'status' wird bestimmt ob es sich um einen aktiven User handelt (0 = geblockt). Über das Array $roles lassen sich beliebig viele Rollen zuweisen. Die Rollen 'anonymous user' und 'authenticated user' werden automatisch zugewiesen.
Schau dir dazu nochmal die Doku unter http://api.drupal.org/api/function/user_save an. Mit user_save werden alle Einstellung sofort übernommen.
Gruß
UwBach
danke erstmal
am 28.04.2008 - 11:40 Uhr
für die schnellen Antwort.
Useranlegen funktioniert recht gut. die Rolle(n) sehe ich aber in der Liste nicht und
in der Bearbeitung sind sie nicht ausgewählt.
Userupdaten funktioniert leider nicht.
ich bekomme folgendes:
* user warning: Duplicate entry 'siamak' for key 2 query: INSERT INTO users (name, pass, mail, status, init, uid, created, access) VALUES ('siamak', 'fcea920f7412b5da7be0cf42b8c93759', 'klm@gmx.de', 0, 'kl@gmx.de', 27, 1209378967, 1209378967) in D:\xampp\htdocs\drupal-5.6\includes\database.mysql.inc on line 172.
* user warning: Duplicate entry '0-1' for key 1 query: INSERT INTO users_roles (uid, rid) values (0, 1) in D:\xampp\htdocs\drupal-5.6\includes\database.mysql.inc on line 172.
* user warning: Duplicate entry '0-2' for key 1 query: INSERT INTO users_roles (uid, rid) values (0, 2) in D:\xampp\htdocs\drupal-5.6\includes\database.mysql.inc on line 172.
* user warning: Duplicate entry '0-3' for key 1 query: INSERT INTO users_roles (uid, rid) values (0, 3) in D:\xampp\htdocs\drupal-5.6\includes\database.mysql.inc on line 172.
Grüße
Kourosh
Sind die Rollen korrekt ...
am 28.04.2008 - 12:22 Uhr
... angelegt? Die Rollen mit der ID 1 und 2 (anonymous user, authenticated user) dürfen nicht zugewiesen werden. Ein weiterer Fehler ist das die UID nicht an die Insert-Rolle übergeben wird (ich vermute du übergibst $account (im Script $uid) nicht als Array). Normalerweise sollte das sonst in dem Modul User mit erledigt werden (Funktion user_save :: Zeile 144 (Drupal 5.7))
Du kannst auch den Code von heute morgen nochmal anpassen, $account sollte als Array übergeben werden - also
$uid['uid] = 0;
// Prüfen ob der User schon angelegt ist
if($user -> uid)
$uid['uid'] = $user -> uid;
Damit müsste die UID jetzt drin stehen (ich hatte nur neue Inserts zu erledigen, von daher brauchte ich das nicht zu beachten). Wenn nicht geht poste deinen veränderten Code nochmal (auch für die nächsten die das Problem haben).
Gruß
UwBach
updaten funktioniert
am 28.04.2008 - 13:43 Uhr
wie du auch gesagt hast, wenn ich anstatt uid das komplette user-Objekt übergebe.
mit Rollenzuweisung geht es weiterhin nicht.
mein Code:
$roles[0] = 3;
$roles[1] = 4;
// anlegen eines Userr sin Drupal
$return = user_save(
$user,
array(
'name' => 'adm',
'pass' => '1234567',
'mail' => 'yxcv@gmx.de',
'roles' => $roles,
'status' => 1,
'init' => 'yxcv@gmx.de'
));
in der DB-Tabelle steht aber:
mysql> select * from drupal.role;
+-----+--------------------+
| rid | name |
+-----+--------------------+
| 1 | anonymous user |
| 2 | authenticated user |
| 3 | public |
| 4 | gggg |
+-----+--------------------+
mysql> select * from
+-----+-----+
| uid | rid |
+-----+-----+
| 1 | 0 |
+-----+-----+
wo der rid = 0 herkommt, ist mir rätselhaft.
Grüße
Kourosh
jetzt klappt alles :)
am 28.04.2008 - 14:15 Uhr
meine Fehler!!
richtig wäre:
$roles[3] = "public";
$roles[4] = "irgendwas";
Danke nochmal.
Kourosh
neue Mitglieder
am 28.04.2008 - 15:34 Uhr
Hallo zusammen,
hat jemand eine Idee, wie ich den Block neue Mitglieder mit bildern versehen könnte.
Grüße
Kourosh